ResultSetHandler接口简介

ResultSetHandler可以对查询出来的ResultSet结果集进行处理,达到一些业务上的需求

ResultSetHandler结果集处理类

本例展示的是使用ResultSetHandler接口的几个常见实现类实现数据库的查询操作,可以大大减少代码量,优化程序

每一种实现类都代表了对查询结果集的一种处理方式

ResultSetHandler实现类说明
ArrayHandler将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler将结果集中的每一条记录记录都封装 到一个Object[]数组中, 将这些数组再封装到List集合中
BeanHandler将结果集中第一条记录封装到指定的JavaBean
BeanListHandler将结果集中每一条记录封装到指定的JavaBean中,再将这些JavaBean封装到List集合中
MapHandler将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
ScalarHandler用于封装单个数据.例如select count(*) from table_name

查询内容

后面使用的数据是
image.png

要练习的查找内容如下

  • 查询id为5的记录,封装到数组中
  • 查询所有数据,封装到List集合中
  • 查询id为5的记录,封装到指定JavaBean中
  • 查询薪资大于 3000 的所员工信息,封装到JavaBean中再封装到List集合中
  • 查询姓名是 张百万的员工信息,将结果封装到Map集合中
  • 查询所有员工的薪资总额

代码示例

/**
 *   项目描述: 使用QueryRunner类query方法执行查询操作
 *   作   者: chain.xx.wdm
 *   备   注:
 *      ResultSetHandler接口可以对查询出来的ResultSet结果集进行处理,达到一些业务上的需求
 */

public class QueryRunnerSelectTest {

    /**
     * 查询id为5的记录,封装到数组中
     *
     * ArrayHandler 将结果集中的第一条记录封装在一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
     */
    @Test
    public void queryFindByIdTest() throws SQLException {

        // 1。自动模式创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 2。编写占位符形式的sql语句
        String sql = "select * from employee where id = ?";
        // 3。执行语句,获取结果集
        Object[] query = queryRunner.query(sql,new ArrayHandler(),5);
        // 4。处理结果集,打印结果
        System.out.println(Arrays.toString(query));
    }

    /**
     * 查询所有数据,封装到List集合中
     *
     * ArrayListHandler 将结果集中的每一条记录都封装在一个Object[]数组中,将这些数组再封装到List集合中
     */
    @Test
    public void queryFindAll() throws SQLException {

        // 1。有参方式构造QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 2。编写sql语句(这里不需要占位符)
        String sql = "select * from employee";
        // 3。执行query()语句获取结果集
        List<Object[]> query = queryRunner.query(sql, new ArrayListHandler());
        // 4。遍历List集合,获取结果
        for(Object[] lst:query){
            System.out.println(Arrays.toString(lst));
        }
    }

    /**
     * 查询id为5的记录,封装到指定JavaBean中
     *
     * BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中
     */
    @Test
    public void queryToJavaBean() throws SQLException {

        // 1.使用有参方式构造QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 2.编写占位符形式的sql语句
        String sql = "select * from employee where eid = ?";
        // 3.执行sql语句查询,将结果封装在Employee中
        Employee query = queryRunner.query(sql, new BeanHandler<Employee>(Employee.class), 5);
        // 4.获取结果
        System.out.println(query);
    }

    /**
     * 查询薪资大于 3000 的所员工信息,封装到JavaBean中再封装到List集合中
     *
     * BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,再将这些javaBean再封装到List集合中
     */
    @Test
    public void queryFindSalaryToBean() throws SQLException {

        // 自动模式构造QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 编写占位符形式的sql语句
        String sql = "select * from employee where salary > ?";
        // 创建Object类型的数组,数组中元素是替换占位符的数值
        //Object[] param = {3000,5000};
        // 执行sql语句,将结果封装到指定javaBean中,再封装到List集合中
        List<Employee> query = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), 300);
        // 遍历List集合,打印结果
        for(Employee e:query){
            System.out.println(e);
        }
    }

    /**
     * 查询姓名是 张百万的员工信息,将结果封装到Map集合中
     *
     * MapHandler 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
     */
    @Test
    public void queryToMap() throws SQLException {

        // 1.有参方式构造QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 2.编写有占位符形式的sql语句
        String sql = "select * from employee where name = ?";
        // 3.执行sql语句,将结果封装到Map中
        Map<String, Object> map = queryRunner.query(sql, new MapHandler(), "张百万");
        // 4.打印结果
        Set<Map.Entry<String, Object>> entries = map.entrySet();
        for(Map.Entry<String, Object> m:entries){
            System.out.println(m.getKey() + " = " + m.getValue());
        }
    }

    /**
     * 查询所有员工的薪资总额
     *
     * ScalarHandler 用于封装单个数据,例如select count(*) from employee
     */
    @Test
    public void queryToScalar() throws SQLException {

        // 使用有参方式构造QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        // 编写sql语句
        String sql = "select sum(salary) from employee";
        // 执行sql语句
        Double result = queryRunner.query(sql, new ScalarHandler<Double>());
        // 获取结果
        System.out.println(result);
    }
}

chain_xx_wdm
64 声望2 粉丝

1.领养代替买卖