DBUtils框架的使用下

3次阅读

共计 4429 个字符,预计需要花费 12 分钟才能阅读完成。

通过 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
然后添加成员变量

privateComboPooledDataSource dataSource =newComboPooledDataSource();

添加 ArrayHandler 的测试代码

   @Test    public void testArrayHandler() throws SQLException{        //ArrayHandler  将结果集的第一行数据存入 Object 数组        QueryRunner queryRunner =newQueryRunner(dataSource);        String sql =”select * from account”;        // 数组的每一个元素对应第一行数据的每一列        Object[] objects = queryRunner.query(sql,newArrayHandler());        System.out.println(Arrays.toString(objects));    }

运行代码

添加 ArrayListHandler 测试代码

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

运行代码


添加 BeanHandler 测试代码

   @Test    public void testBeanHandler() throws SQLException{        //BeanHandler   将结果集的第一行数据封装到 JavaBean 对象中        QueryRunner queryRunner =newQueryRunner(dataSource);        String sql =”select * from account”;               // 传入 Account.class 参数是为了在方法中通过反射构造 Account 对象实例        Account account = queryRunner.query(sql,newBeanHandler<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 =newQueryRunner(dataSource);        String sql =”select * from account”;        List<Account> list = queryRunner.query(sql,newBeanListHandler<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 =newQueryRunner(dataSource);        String sql =”select * from account”;               // 泛型为什么写 Object  因为每列的类型都不一样        List<Object> list = queryRunner.query(sql,newColumnListHandler(“name”));        System.out.println(list);    }

运行代码


添加 MapHandler 测试代码

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

运行代码


添加 MapListHandler 测试代码

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

运行代码


添加 KeyedHandler 测试代码

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

运行代码


添加 ScalarHandler 测试代码

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

运行代码


到这里,九个 Hanlder 就介绍完毕了。
最常用的几个:
BeanHandler、BeanListHandler、ColumnListHandler、ScalarHandler。

转自:https://www.cnblogs.com/blizzawang/p/11411792.html

正文完
 0