iyth888 发表于 2018-11-20 10:31:23

Apache Commons DbUtils

Apache Commons DbUtils工具包使用介绍
  这篇文章主要介绍了Apache Commons DbUtils工具包使用介绍,本文介绍了DBUtils是什么东西、熟悉DBUtils的一些问题、API介绍等内容,需要的朋友可以参考下.
  一、介绍
  DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是在JDBC的基础上做了一层封装,主要是对结果集的封装,可以直接将查询出来的结果集封装成JavaBean,旨在简化JDBC代码混乱与重复。
  JDBC代码开发,存在很多难点:
  1)操作过程复杂,代码操作一个模式,大量的重复。
  2)结果集难以处理。
  3)到处都强制检查SQLException,影响代码的美观和可读性。
  二、熟悉DBUtils
  在使用DBUtils之前,应该注意一些问题:
  1)DBUtils是JDBC的简单封装,可以和JDBC混合使用。
  2)DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:
  必须满足JavaBean的规范;
  其次Bean的getter与setter方法的名字与结果集的列名必须一一对应;
  不要求JavaBean的私有成员与表结果集列名一一对应。
  3)DBUtils可以将结果集封装为各种类型
  主要有:Bean/List,Map/List/Map,数组/List,列/List,这些类型。
  对于Map的类型使用KeyedHandler作为结果集处理器,内层的Map是“列名-值"对,外层的Map是“主键-内层Map的引用”,但此处的主键不一定就是数据库的主键,可以随意指定。
  4)DBUtils执行插入操作的时候,无法返回自增主键,这是一个很严重的问题,当然不能怪DBUtils,可以通过变通的方法来实现,比如在MySQL中,执行完了一个插入SQL后,接着执行SELECT LAST_INSERT_ID()语句,就可以获取到自增主键。
  5)DBUtils的性能和JDBC性能是一样,测试过程中没发现性能损失,拥有了很高性能的同时,而不失JDBC的灵活性。
  6)对于JavaBean的成员类型定义,有一条原则那就是:尽可能使用包装类型,而不要使用基本类型。
  三、API介绍
  1、org.apache.commons.dbutils包
  DbUtils:一个为简化JDBC操作的小类库
  AbstractQueryRunner:是抽象类,QueryRunner和AsyncQueryRunner类的基类。
  AsyncQueryRunner:可插拔的方式执行SQL查询,处理结果集。是线程安全的类。
  BaseResultSetHandler:把结果集转换成其它对象的扩展。
  BeanProcessor:BeanProcessor匹配列名到Bean属性名,并转换结果集列到Bean对象的属性中。
  Dbutils:一个JDBC辅助工具集合。
  GenerousBeanProcessor:提供了从数据库列名到JavaBean属性之间的智能匹配。
  ProxyFactory:产生JDBC接口的代理实现。
  QueryLoader:属性文件加载器,主要用于加载属性文件中的SQL到内存中。
  QueryRunner:使用可插拔的策略执行SQL查询并处理结果集。
  ResultSetHandler:把ResultSet转换为别的对象的工具。
  ResultSetIterator:包装结果集为一个迭代器。
  RowProcessor:将ResultSet行转换为别的对象的工具。
  2、org.apache.commons.dbutils.handlers包
  AbstractKeyedHandler:KeyedHandler的抽象类。
  AbstractListHandler:简化ResultSetHandler类开发的抽象类,把结果集转换成List。
  ArrayHandler:把结果集中的第一行数据转成对象数组。
  ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  BeanMapHandler:实现了Bean返回Map集合。结果集所有的行都会转换成Bean,并根据指定的Key存储到Map中。
  ColumnListHandler:将结果集中某一列的数据存放到List中。
  KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
  MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
  ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。
  3、org.apache.commons.dbutils.wrappers包
  SqlNullCheckedResultSet:在每个getXXX方法上检查SQL NULL值的ResultSet包装类。
  StringTrimmedResultSet:删除结果集中字符串前后空格的ResultSet包装类。
  四、重要类详述
  1、DbUtils类
  DbUtils提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。
  主要方法如下:
  1)public static void close(...) throws SQLException
  DbUtils类提供了三个重载的close方法。这些方法检查所提供的参数是不是NULL,如果为空,就关闭Connection、Statement和ResultSet。
  2)public static void closeQuietly(...)
  bUtils类提供了四个重载的closeQuietly方法。这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
  3)public static void commitAndCloseQuietly(Connection conn)
  在连接内提交SQL,然后关闭连接,并且在关闭连接时不抛出SQL异常。
  4)public static boolean loadDriver(String driverClassName)
  此方法载入并注册JDBC驱动,如果成功就返回true,失败返回false。使用该方法,无需捕捉ClassNotFoundException异常。
  2、QueryRunner类
  QueryRunner类简化了SQL查询,它与ResultSetHandler组合在一起使用可完成大多数数据库操作,能够大量减少代码量。
  QueryRunner类提供了两个构造方法
  1)默认的构造方法
  2)需要一个javax.sql.DataSource来作参数的构造方法。
  3、QueryRunner类的主要方法
  1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException
  执行一个查询操作,在此查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。此方法会自行处理PreparedStatement和ResultSet的创建和关闭。
  2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException
  几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource方法中重新获得Connection。
  3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException
  执行一个不需要置换参数的查询操作。
  4)public int update(Connection conn, String sql, Object[] params) throws SQLException
  用来执行一个更新(插入、更新或删除)操作。
  5)public int update(Connection conn, String sql) throws SQLException
  用于执行一个不需要置换参数的更新操作。
  6)insert插入方法
  7)batch批处理方法
  转载地址:http://www.iyunv.net/article/61886.htm

页: [1]
查看完整版本: Apache Commons DbUtils