• Spring Template查询数据 三种callback之间的区别


    1、org.springframework.jdbc.core.ResultSetExtractor. 

      基本上属于JdbcTemplate内部使用的Callback接口,相对于下面两个Callback接口来说,ResultSetExtractor拥有更多的控制权,因为使用它,你需要自行处理ResultSet:

    package org.springframework.jdbc.core;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.springframework.dao.DataAccessException;
    
    public interface ResultSetExtractor {
        Object extractData(ResultSet rs) throws SQLException, DataAccessException;
    }

    在直接处理完ResultSet之后,你可以将处理后的结果以任何你想要的形式包装后返回。 

    2、org.springframework.jdbc.core.RowCallbackHandler. 

      RowCallbackHandler相对于ResultSetExtractor来说,仅仅关注单行结果的处理,处理后的结果可以根据需要存放到当前RowCallbackHandler对象内或者使用JdbcTemplate的程序上下文中,当然,这个完全是看个人爱好了。

      RowCallbackHandler的定义如下: 

    package org.springframework.jdbc.core;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public interface RowCallbackHandler {
        void processRow(ResultSet rs) throws SQLException;
    }

    3、org.springframework.jdbc.core.RowMapper.

      它是 ResultSetExtractor的精简版,功能类似于 RowCallbackHandler,也是只关注当行结果的处理。不过它的返回的结果会有 ResultSetExtractor实现类进行组合。

      RowMapper的接口定义如下:

    package org.springframework.jdbc.core;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public interface RowMapper {
         Object mapRow(ResultSet rs, int rowNum) throws SQLException; 
    }

    为了说明这三种回调接口的使用方法,我们暂时设置如下的场景: 假设我们有一表users,里面有userid,username,userpwd三个字段,我们为此建立了一个JavaBean:

     package com.google.spring.jdbc;
     
    public class UserBean{
    private Integer userId; private String username; private String userpwd; public Integer getUserId(){ return userId; } public void setUserId(Integer userId){ this.userId = userId; } public String getUsername(){ return username; } public void setUsername(String username){ this.username = username; } public String getUserpwd(){ return userpwd; } public void setUserpwd(String userpwd){ this.userpwd = userpwd; } }

    使用自定义的ResultSetExtractor,可以如下进行处理:

    List users = (List)jdbcTemplate.query("SELECT * FROM USERS WHERE USERNAME LIKE '%n%'", new ResultSetExtractor()
    {
        
        @Override
        public Object extractData(ResultSet rs) throws SQLException,
                DataAccessException
        {
            List users = new ArrayList();
            while(rs.next())
            {
                UserBean userBean = new UserBean();
                userBean.setUserId(rs.getInt("userId"));
                userBean.setUsername(rs.getString("username"));
                userBean.setUserpwd(rs.getString("userpwd"));
                users.add(userBean);
            }
            return users;
        }
    });
    System.out.println(users);

    使用RowCallbackHandler可进行如下的处理:

    final List users = new ArrayList();
    jdbcTemplate.query("SELECT * FROM USERS WHERE USERNAME LIKE '%n%'", new RowCallbackHandler()
    {
        @Override
        public void processRow(ResultSet rs) throws SQLException
        {
            UserBean userBean = new UserBean();
            userBean.setUserId(rs.getInt("userId"));
            userBean.setUsername(rs.getString("username"));
            userBean.setUserpwd(rs.getString("userpwd"));
            users.add(userBean);
        }
    });
    System.out.println(users.size());

    使用RowMapper,可进行如下的处理:

    List users = jdbcTemplate.query("SELECT * FROM USERS WHERE USERNAME LIKE '%n%'", new RowMapper()
    {
        @Override
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException
        {
            UserBean userBean = new UserBean();
            userBean.setUserId(rs.getInt("userId"));
            userBean.setUsername(rs.getString("username"));
            userBean.setUserpwd(rs.getString("userpwd"));
            return userBean;
        }
    });
    System.out.println(users.size());

    以上是以jdbcTemplate为例,介绍了3种回调接口的用法,其实还可以扩展到hbaseTemplate上

    转载请注明出处,期待共同进步...
  • 相关阅读:
    c++ 启发式搜索解决八数码问题
    基于linux或windows的c/s的循环服务器求一元二次方程的根
    基于linux或windows平台上的c/s简单通信
    第七章总结
    第六章总结
    第五章总结
    第四章总结
    第一章总结
    第三章总结
    第二章总结
  • 原文地址:https://www.cnblogs.com/zhangyukun/p/3685369.html
Copyright © 2020-2023  润新知