乐趣区

关于java:DBUtilsQueryRunner实现查询操作

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

查问内容

前面应用的数据是

要练习的查找内容如下

  • 查问 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);
    }
}
退出移动版