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 < cke: 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 < cke: 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 < cke: object,
- 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)......
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: