欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DBUtils框架的使用(下)

程序员文章站 2023-11-19 19:59:58
刚才讲了使用QueryRunner插入、修改、更新数据,现在来学习一下使用QueryRunner进行数据库表查询。 通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很 ......

刚才讲了使用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));
    }

运行代码
DBUtils框架的使用(下)
添加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));
        }
    }

运行代码
DBUtils框架的使用(下)
添加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());
    }

运行代码
DBUtils框架的使用(下)
注意事项:使用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();
        }
    }

运行代码
DBUtils框架的使用(下)
添加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);
    }

运行代码
DBUtils框架的使用(下)
添加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);
    }

运行代码
DBUtils框架的使用(下)
添加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);
        }
    }

运行代码
DBUtils框架的使用(下)
添加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);
    }

运行代码
DBUtils框架的使用(下)
添加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);
    } 

运行代码
DBUtils框架的使用(下)
到这里,九个hanlder就介绍完毕了。
最常用的几个:
beanhandler、beanlisthandler、columnlisthandler、scalarhandler。