zoukankan      html  css  js  c++  java
  • 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上

    转载请注明出处,期待共同进步...
  • 相关阅读:
    JAVA基础——编程练习(二)
    JAVA基础——面向对象三大特性:封装、继承、多态
    JVM内存
    50. Pow(x, n) (JAVA)
    47. Permutations II (JAVA)
    46. Permutations (JAVA)
    45. Jump Game II (JAVA)
    43. Multiply Strings (JAVA)
    42. Trapping Rain Water (JAVA)
    41. First Missing Positive (JAVA)
  • 原文地址:https://www.cnblogs.com/zhangyukun/p/3685369.html
Copyright © 2011-2022 走看看