Dbutils工具基本使用

来源:互联网 发布:数据建模分析 编辑:程序博客网 时间:2024/06/05 06:28

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
原创粉丝点击