dbUtils从使用到源码解析
最近工作关系需要对dbutils进行一些了解,来完善公司的测试DAO的框架封装。给本屌丝最大的感慨 麻雀虽小,五脏俱全。
dbutils是Apache组织开发的一个简单,小巧,又具有大部分功能的操作数据库的java组件,dbutis包含三个包,10几个类,够简单的吧!
使用dbutils也非常的简单,只需要初始化QueryRunner类,传入SQL语句,就可以进行增删改查的所有的操作,当然dbutils对查询也做了一些比较简单的查询的封装,主要是对ResultHandle做了一些处理。最终还是通过QueryRunner来进行的操作的。
?
QueryRunner可以直接new进行实例化,也有传入dataSource进行实例化的构造器,前者进行实例化之后,操作时需要传递Connnection参数,方便比较容易获得Connection的应用使用,而使用DataSource进行实例化就可以直接进行数据库操作了。这里特别的提醒一下。如果应用中存在多个数据库源,并且使用了proxool的数据库连接池,那必须设置数据库连接池的别名alias,这是因为数据库连接池在获取连接的时候首先通过别名来获得链接,如果都没有设置别名,将有可能获得错误的数据库连接,后果就严重了!大家可以看看这段代码就明了了。
?
public class CalendarType implements SpecialTypeHandle<Calendar> {@Overridepublic Class<Calendar> getClassSimpleName() {return Calendar.class;}@Overridepublic Calendar getResultObject(Class<?> eClass, Object value) {Calendar calendar = Calendar.getInstance();if (eClass.getName().equals("java.sql.Timestamp")) {TimeStamp timeStamp = (TimeStamp) value;calendar.setTimeInMillis(timeStamp.getTime());} else if (eClass.getName().equals("java.sql.Date")) {Date dateValue = (Date) value;calendar.setTime(dateValue);}return calendar;}}?至此,我们就完成了大部分封装工作了,是不是很简单,我们还需要进行一些封装,那就是将方法封装出去让用户使用。由于在项目中我们使用了spring,所以整合进spring,这非常的方便,更棒的是有很多需要写代码的工作我们也省却了。比如设置那个特殊类型的map的工作,还有实例化handle的工作,这些都可以让spring来做了。再往上封装就非常的简单了,每个人都有自己的封装的习惯,这里我也就不贴出相关的封装的代码,有需要的可以找我要个。
?
总结一下:dbutils非常简单,通过简单的改造之后我们也能实现很强大的功能,这是我们想要的结果。我们在进行框架性的东西改造或者封装的时候,我们要对需要处理的框架要透彻的了解,这样可以让我们更加简单,高效,正确的,漂亮的完成工作,当然本屌丝水平有限,班门弄斧的还请见谅!顺便说一句,我们已经将dbutils写成了一个比较通用的orm组件了,测试环境下写测试用例已经很方便了。
?
?