Apache Commons DbUtils工具包使用介绍
一、介绍
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<bean>,map/list<map>/map<map>,数组/list<数组>,列/list<列>,这些类型。
对于map<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批处理方法
上一篇: 蕨菜能致癌吗,再不知道就晚了
推荐阅读
-
Apache负载均衡设置方法 mod_proxy使用介绍
-
Apache shiro的简单介绍与使用教程(与spring整合使用)
-
Apache加速模块mod_pagespeed安装使用详细介绍
-
apache下ab.exe使用介绍
-
Apache Commons DbUtils工具包使用介绍
-
使用Apache commons-cli包进行命令行参数解析的示例代码
-
Apache Shiro 使用手册(一) Shiro架构介绍
-
Apache Commons Logging 是如何决定使用哪个日志实现类的
-
Apache Commons Logging 是如何决定使用哪个日志实现类的
-
使用apache.commons.fileupload等进行文件上传