DBUtils详细介绍+实例

DBUtils是一个小型的Java类库,它通过提供便捷的资源管理和结果集处理,使得JDBC编程更加简单,有效防止资源泄露。它包含了如DbUtils、QueryRunner和ResultSetHandler等关键组件,适合于小型项目和追求效率的场景。本文详细介绍了DBUtils的用途、优点、适用场景,以及如何使用DBUtils进行数据库操作。
摘要由CSDN通过智能技术生成

1.介绍

  1)简介:
  DBUtils是一个小型的类库,它使JDBC编程更加方便,简单。在JDBC编程中,资源的关闭是显式的,极易导致编程出现错误,DBUtils把这些工作抽象出来,使得程序员编程时仅需要关心正真的问题,即对数据库的增删改查。
  
  2)优点:
  杜绝资源泄露。修正JDBC代码并不困难,但是这是耗时而乏味的,这通常导致连接泄露并且难以跟踪到。
  清洁干净的持久化代码。大段的持久化数据到数据库代码彻底精简,剩下的代码清晰地表达了编码的意图。
  从ResultSet里自动组装JavaBean。你不再需要手工set每一行每一列的值到bean中,每一行数据都将会以一个Bean实例的形式出现

  3)适用场景:
  通常初学者用JDBC比较多,只是初学者为了打实基础,练习阶段少用框架和帮助类库。
  小型项目,小型项目不需要太多的数据库操作,不需要考虑跨数据库兼容问题,用框架并不会让编码更简单。
  需要高效率的项目,无论iBatis、Hibernate,到了底下还是JDBC,直接用JDBC访问数据库无疑是最优的效率最高的方案。
  
  4)准备:
  下载下来后(当然也可以使用maven工程),名称为commons-dbutils-1.6.jar,下面总共包含三个包,分别是:
  DBUtils的包结构
  
  其中的org.apache.commons.dbutils包主要有如下的接口和类:
  ResultSetHandler——将ResultSet转换为别的对象的工具。
  BeanProcessor——匹配列名到Bean属性名,转换结果集列到Bean对象的属性。
  DbUtils——一个JDBC辅助工具集合。
  ProxyFactory——产生JDBC接口的代理实现。
  QueryLoader——属性文件加载器,用于加载属性文件中的SQL到内存中。
  QueryRunner——使用可插拔的策略执行SQL查询并处理结果集。
  ResultSetIterator——包装结果集为一个迭代器。
  
  其中的org.apache.commons.dbutils.handlers包为第一个包中ResultSetHandler接口的实现类:
  AbstractListHandler——将ResultSet转化为List类型的抽象类。
  ArrayHandler——将ResultSet转化为Object[]类型的实现类。
  ArrayListHandler——将ResultSet转化为List<Object[]>类型的实现类。
  BeanHandler——将ResultSet转化为JavaBean类型的实现类。
  BeanListHandler——将ResultSet转化为List<JavaBean>类型的实现类。
  ColumnListHandler ——将ResultSet转化为List<Object>类型的实现类。
  MapHandler ——将ResultSet转换为Map类型的实现类。
  MapListHandler ——将ResultSet转换为List<Map>类型的实现类。
  KeyedHandler——将ResultSet转换为Map<Map>类型的实现类。
  ScalarHandler ——将ResultSet的一个列转化到一个对象。

  其中的org.apache.commons.dbutils.wrappers包:
  SqlNullCheckedResultSet——在每个getXXX方法上检查SQLNULL值的包装类。
  StringTrimmedResultSet——取出结果集中字

1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils包括3个包: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成类对象 BeanListHandler :将ResultSet中所有的数据转化成List List中存放的是类对象 ColumnListHandler :将ResultSet中某一列的数据存成List List中存放的是Object对象 KeyedHandler :将ResultSet中存成映射 key为某一列对应为Map Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]
ThreadLocal是Java中的一个线程局部变量,它可以为每个线程提供独立的变量副本,使得每个线程都可以独立地修改自己所拥有的变量副本,而不会影响其他线程的副本。DBUtils是一个开源的数据库操作工具类库,它封装了JDBC操作细节,简化了数据库操作的代码。 当ThreadLocal与DBUtils结合使用时,可以实现在多线程环境下,每个线程都拥有独立的数据库连接,避免了线程间的资源竞争和并发访问的问题。 下面是一个ThreadLocal与DBUtils结合使用的示例: ```java import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class DBUtilsExample { private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<>(); public static void main(String[] args) { // 初始化数据源 DataSource dataSource = ...; // 创建查询器 QueryRunner queryRunner = new QueryRunner(dataSource); try { // 获取数据库连接 Connection connection = dataSource.getConnection(); // 将连接保存到ThreadLocal中 connectionHolder.set(connection); // 在当前线程中执行数据库操作 User user = queryRunner.query("SELECT * FROM user WHERE id = ?", new BeanHandler<>(User.class), 1); System.out.println(user); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭数据库连接 Connection connection = connectionHolder.get(); if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } // 清除ThreadLocal中的连接 connectionHolder.remove(); } } } ``` 在上述示例中,我们通过ThreadLocal将数据库连接保存在每个线程的独立副本中。这样,在每个线程中执行数据库操作时,都可以从ThreadLocal中获取到独立的数据库连接,而不会受到其他线程的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值