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。

原文地址:https://www.cnblogs.com/blizzawang/p/11411792.html

时间: 2024-10-14 12:52:52

DBUtils框架的使用(下)的相关文章

DBUtils框架

主要知识点: 一.多表关联操作(DBUtils框架) 1.一对多关系 *** 2.多对多关系 *** 3.一对一关系 二.分页 三.监听器组件(web三大组件之一) 四.踢人综合示例(监听器实现) 一.分页核心类总结: 1.分页必要性 select * from account; 分页的结果就是要让指定的记录加载到内存 1.人的习惯 2.内存的限度(核心问题) 3.屏幕的限度 2.如何做分页? 1.数据库层面的考虑 select * from account limit startIndex,s

Apache—DBUtils框架简介

转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernat

javaweb学习总结(四十一)——Apache的DBUtils框架学习

一.commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. commons-dbutilsAPI介绍: org.apache.commons.dbutils.QueryRunner org.apache.commons.dbutils.Resul

Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用

前面做了一个非常垃圾的小demo,真的无法直面它,菜的抠脚啊,真的菜,好好努力把.菜鸡. --WH 一.JDBC是什么? Java Data Base Connectivity,java数据库连接,在需要存储一些数据,或者拿到一些数据的时候,就需要往数据库里存取数据,那么java如何连接数据库呢?需要哪些步骤? 1.注册驱动 什么是驱动? 驱动就是JDBC实现类,通俗点讲,就是能够连接到数据库功能的东西就是驱动,由于市面上有很多数据库,Oracle.MySql等等,所以java就有一个连接数据库

深入分析JavaWeb Item34 -- DBUtils框架学习

一.commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. commons-dbutilsAPI介绍: org.apache.commons.dbutils.QueryRunner org.apache.commons.dbutils.Resul

Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口

Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. API介绍: org.apache.commons.dbutils.QueryRunner --BDMa

JDBC【数据库连接池、DbUtils框架、分页】

1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的... 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接池 编写连接池需实现java.sql.DataSource接口 创建批量的Connection用LinkedList保存[既然是个池,当然用集合保存..LinkedList底层是链表,对增删性能较好] 实现getConnetion(),让getConnection()每次调用,都是在LinkedLi

你不知道的DBUtils框架

DBUtils能干啥 Commons DbUtils库是 Apache 组织提供的一个开源 JDBC工具类库,它是结合连接池 C3P0 使用工具类.它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.它有三个核心功能,刚好用于解决项目实践中很容易碰到的问题. QueryRunner 中提供对 sql 语句操作的 api ResultSetHandler 接口,用于定义 select 操作后,怎样封装结果集 定义了关闭资源与事务处

DBUtils框架的使用(上)

昨天做了这么多的铺垫,当然就是为了引出今天的DBUtils框架了,它的实现原理跟我们编写的简易框架是类似的. 话不多说,进入正题. commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. jar包下载地址:链接:https://pan.baidu.com/s/1BKtq_VoBw5