Dbutils工具基本使用

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

本篇首先介绍几个关于Dbutils的核心API,然后介绍Dbutils的基本原理,
并整体介绍一下关于Dbutils的使用流程。

QueryRunner
QueryRunner类是用于操作SQL语句执行数据库操作的类。该类的常用方法有:

query(),用于执行数据库表信息的查询操作;
update(),用于执行数据库表的内容的增加、修改和删除的操作;
batch(),用于执行SQL语句中的批处理的操作

QueryRunner的构造方法常用的有两个,

public QueryRunner() {
        super();
    }
使用无参数的构造时事务是手动控制,需要人为的开事务关事务

public QueryRunner(DataSource ds) {
        super(ds);
    }
使用有参数的构造方式时,事务是自动控制的,一条SQL语句一个事务,不需要人为的控制。

注意当使用带有数据库连接池的参数得到QueryRunner时,使用QueryRunner的方法只需要传递SQL语句和ResultSetHandler参数就可以,此时是自动事务;但是当不使用带数据库连接池的参数来获得QueryRunner时,使用QueryRunner的方法需要多传递一个Connection连接对象,而且可以人为的开关事务。
也就是这么使用:

                    QueryRunner runner=new QueryRunner();
                    runner.query(Connection,sql,ResultSetHandler,Object... param);
                    runner.update(Connection,sql,Object...param);
                    runner.batch(Connection con,sql,Object[][] objs);

                    QueryRunner runner=new QueryRunner(DataSource ds);
                    runner.query(sql,ResultSetHandler,Object... param);
                    runner.update(sql,Object...param);
                    runner.batch(sql,Object[][] objs);

ResultSetHandler
ResultSetHandler是一个接口,用于定义结果集的封装。当然Dbutils也定义了9个关于ResultSetHandler的实现类方便直接使用。

    @Test
    public void selectTest() throws SQLException{
        String sql="select * from book where id > ?";
        QueryRunner runner=new QueryRunner();
        Connection conn=DataSourceUtil.getConnection();
        List<Book> list = runner.query(conn,sql, new ResultSetHandler<List<Book>>(){
            public List<Book> handle(ResultSet rs) throws SQLException {
                List<Book> list=new ArrayList<Book>();
                while(rs.next()){
                    Book book=new Book();
                    book.setId(rs.getInt("id"));
                    book.setName(rs.getString("name"));
                    book.setPrice(rs.getDouble("price"));
                    list.add(book);
                }

                return list;
            }
        },2);
        for (Book book: list) {
            System.out.println(book);
        }
        DbUtils.close(conn);
    }

ResultSetHandler的九个实现类:
ArrayHandler, 将结果集中第一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。

Object[] obj = runner.query(sql, new ArrayHandler());
System.out.println(Arrays.toString(obj));

[1, Spring实战, 45.5]

ArrayListHandler, 将结果集中每一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。在将这些数组装入到List集合。

List<Object[]> list = runner.query(sql, new ArrayListHandler());
for(Object[] obj : list){
    System.out.println(Arrays.toString(obj));
}

[1, Spring实战, 45.5]
[2, Spring Boot实战, 55.6]
[3, Docker实战, 55.6]
[4, Docker实战, 30.9]
[5, JavaEE开发大全, 60.5]
[9, Android大全, 70.5]
[10, Android大全, 70.5]

BeanHandler, 将结果集中第一条记录封装到一个javaBean中。

Book book = runner.query(sql, new BeanHandler<Book>(Book.class));
System.out.println(book);

Book [id=1, name=Spring实战, price=45.5]

BeanListHandler, 将结果集中每一条记录封装到javaBean中,在将javaBean封装到List集合.

List<Book> list = runner.query(sql, new BeanListHandler<Book>(Book.class));
System.out.println(list);

[Book [id=1, name=Spring实战, price=45.5], Book [id=2, name=Spring Boot实战, price=55.6], Book [id=3, name=Docker实战, price=55.6], Book [id=4, name=Docker实战, price=30.9], Book [id=5, name=JavaEE开发大全, price=60.5], Book [id=9, name=Android大全, price=70.5], Book [id=10, name=Android大全, price=70.5]]

ColumnListHandler, 将结果集中指定列的值封装到List集合.

List<Object> list = runner.query(sql, new ColumnListHandler("name"));
System.out.println(list);

[Spring实战, Spring Boot实战, Docker实战, Docker实战, JavaEE开发大全, Android大全, Android大全]

MapHandler, 将结果集中第一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值

Map<String, Object> map = runner.query(sql, new MapHandler());
System.out.println(map);

{price=45.5, name=Spring实战, id=1}

MapListHandler, 将结果集中每一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值,在将这些Map封装到List集合

List<Map<String,Object>> list = runner.query(sql, new MapListHandler());
System.out.println(list);

[{price=45.5, name=Spring实战, id=1}, {price=55.6, name=Spring Boot实战, id=2}, {price=55.6, name=Docker实战, id=3}, {price=30.9, name=Docker实战, id=4}, {price=60.5, name=JavaEE开发大全, id=5}, {price=70.5, name=Android大全, id=9}, {price=70.5, name=Android大全, id=10}]

KeyedHandler,在使用指定的列的值做为一个Map集合的key,值为每一条记录的Map集合封装。

Map<Object, Map<String, Object>> map = runner.query(sql, new KeyedHandler("name"));
System.out.println(map);

{Spring Boot实战={price=55.6, name=Spring Boot实战, id=2}, Android大全={price=70.5, name=Android大全, id=10}, Docker实战={price=30.9, name=Docker实战, id=4}, JavaEE开发大全={price=60.5, name=JavaEE开发大全, id=5}, Spring实战={price=45.5, name=Spring实战, id=1}}

ScalarHandler 进行单值查询 select count(*) from account;

String sql="select count(*) from book";
QueryRunner runner=new QueryRunner(DataSourceUtil.getDataSource());
Object obj = runner.query(sql, new ScalarHandler());
System.out.println(obj);

7

Dbutils
Dbutils类提供了若干个静态的方法,用于关闭资源、以及事务的rollback和commit操作。

close(Connection)
closeQuietly(Connection)

commitAndClose(Connection)
commitAndCloseQuietly(Connection)

loadDriver(String)
loadDriver(ClassLoader, String)
......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值