DBUtils框架的使用(下)

简介: DBUtils框架的使用(下)

刚才讲了使用QueryRunner插入、修改、更新数据,现在来学习一下使用QueryRunner进行数据库表查询。
通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很显然,我们应该使用DBUtils工具包提供的实现类来实现封装。
在DBUtils框架中,共提供了九个ResultSetHandler的实现类。

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的key。
  • ScalarHandler:将结果集中的列的信息转换到一个对象中

分别通过案例感受一下。
新建测试类ResultSetHandlerTest
然后添加成员变量

private ComboPooledDataSource dataSource = new ComboPooledDataSource();

添加ArrayHandler的测试代码

    @Test
    public void testArrayHandler() throws SQLException{
        //ArrayHandler    将结果集的第一行数据存入Object数组
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";

        //数组的每一个元素对应第一行数据的每一列
        Object[] objects = queryRunner.query(sql, new ArrayHandler());
        System.out.println(Arrays.toString(objects));
    }

运行代码
在这里插入图片描述
添加ArrayListHandler测试代码

    @Test
    public void testArrayListHandler() throws SQLException{
        //ArrayListHandler    将结果集的每一行数据存入Object数组,然后存入List
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());
        
        for(Object[] objects : list){
            System.out.println(Arrays.toString(objects));
        }
    }

运行代码
在这里插入图片描述
添加BeanHandler测试代码

    @Test
    public void testBeanHandler() throws SQLException{
        //BeanHandler    将结果集的第一行数据封装到JavaBean对象中
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        
        //传入Account.class参数是为了在方法中通过反射构造Account对象实例
        Account account = queryRunner.query(sql, new BeanHandler<Account>(Account.class));
        System.out.println(account.getId());
        System.out.println(account.getName());
        System.out.println(account.getMoney());
    }

运行代码
在这里插入图片描述
注意事项:使用BeanHandler,表列名必须与Bean类的属性名称一致。

添加BeanListHandler测试代码

    @Test
    public void testBeanListHandler() throws SQLException{
        //BeanListHandler    将结果集每一条数据都封装到JavaBean对象,再存入List
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        List<Account> list = queryRunner.query(sql, new BeanListHandler<Account>(Account.class));
        
        for(Account account : list){
            System.out.print(account.getId() + "\t");
            System.out.print(account.getName() + "\t");
            System.out.print(account.getMoney());
            System.out.println();
        }
    }

运行代码
在这里插入图片描述
添加ColumnListHandler测试代码

    @Test
    public void testColumnListHandler() throws SQLException{
        //ColumnListHandler        获得结果集的某一列
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        
        //泛型为什么写Object    因为每列的类型都不一样
        List<Object> list = queryRunner.query(sql, new ColumnListHandler("name"));
        System.out.println(list);
    }

运行代码
在这里插入图片描述
添加MapHandler测试代码

    @Test
    public void testMapHandler() throws SQLException{
        //MapHandler    将结果集中的第一行数据封装到Map集合,key是列名,value是数据值
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        Map<String, Object> map = queryRunner.query(sql, new MapHandler());
        System.out.println(map);
    }

运行代码
在这里插入图片描述
添加MapListHandler测试代码

    @Test
    public void testMapListHandler() throws SQLException {
        // MapHandler 将结果集中的每一行数据封装到Map集合,key是列名,value是数据值,再将Map对象存入List
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());
        
        for(Map<String,Object> map : list){
            System.out.println(map);
        }
    }

运行代码
在这里插入图片描述
添加KeyedHandler测试代码

    @Test
    public void testKeyedHandler() throws SQLException {
        // KeyedHandler    将结果集中的每一行数据都封装到Map里,再将Map存入一个Map里,key可以指定为任意列
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select * from account";
        Map<Object, Map<String,Object>> map = queryRunner.query(sql, new KeyedHandler("name"));
        
        System.out.println(map);
    }

运行代码
在这里插入图片描述
添加ScalarHandler测试代码

    @Test
    public void testScalarHandler() throws SQLException{
        //ScalarHandler        通常保存只有一行一列的结果数据
        QueryRunner queryRunner = new QueryRunner(dataSource);
        String sql = "select count(*) from account";
        long count = (Long) queryRunner.query(sql, new ScalarHandler(1));
        System.out.println(count);
    } 

运行代码
在这里插入图片描述
到这里,九个Hanlder就介绍完毕了。
最常用的几个:
BeanHandler、BeanListHandler、ColumnListHandler、ScalarHandler。

目录
相关文章
|
Java 数据库连接 数据库
JDBC学习(三):封装工具类JDBCUtils类
为了以后方便进行数据库连接、数据库关闭、还有后面的连接池的操作等功能,现在将功能封装到JDBCUtils类当中,作为自己的一个工具箱。
395 0
|
7月前
|
SQL Java 数据库连接
apache DbUtils 组件核心原理与应用
DbUtils 的设计思想是简化 JDBC 编程,通过封装 JDBC 操作,减少样板代码,提高开发效率。它通过 QueryRunner、ResultSetHandler 和 RowProcessor 的协同工作,实现了对 JDBC 资源的精细化管理,同时避免了资源泄漏的风险。DbUtils 的使用不涉及复杂的配置和ORM映射,适合需要快速、轻量级数据库操作的场景。
113 1
|
Java 数据库连接
Java 中封装JDBC连接到JDBCUtils工具类的详解
Java 中封装JDBC连接到JDBCUtils工具类的详解
95 0
|
SQL Java 关系型数据库
DBUtils注意问题
DBUtils注意问题
|
SQL 安全 Java
JDBC Apache—DBUtils 详解(通俗易懂)
JDBC 第六节 ApacheDBUtils详解!
400 0
|
SQL Java 数据库连接
|
SQL Java 数据库连接
DBUtils框架的使用(上)
DBUtils框架的使用(上)
156 0
DBUtils框架的使用(上)
|
SQL 关系型数据库 MySQL
Python编程:DBUtils管理数据库连接池
Python编程:DBUtils管理数据库连接池
266 0
Python编程:DBUtils管理数据库连接池
|
SQL Java 数据库连接
【JDBC】JDBCUtils工具类开发
1.JDBCUtils工具类开发 我们来写一个Jdbc工具类——JdbcUtils,这个工具类可以用来获取Connection对象以及关闭数据库连接 上代码:
183 0
|
SQL Oracle 搜索推荐
JDBC【数据库连接池、DbUtils框架、分页】(三)
为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开、关闭连接造成系统性能低下
182 0
JDBC【数据库连接池、DbUtils框架、分页】(三)