DbUtils开源组件--源码研究和应用实践小结
2012-12-03 14:30
399 查看
Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
官方网站:http://commons.apache.org/dbutils/
下载地址:http://commons.apache.org/dbutils/download_dbutils.cgi
官方例子:http://commons.apache.org/dbutils/examples.html(可能有个别错误)
个人例子:http://download.csdn.net/detail/fansunion/4840246
源码研究小结
一、概述
版本:1.4
包:3个,org.apache.commons.dbutils,
org.apache.commons.handlers,
org.apache.commons.dbutils.wrappers
接口:2个
类:22个(不包含package-info.java)
package-info.java:3个
二、org.apache.commons.dbutils包和类的解读
包含一些些核心类和接口,DbUtils, QueryRunner和ResultSetHandler接口最值得关注。
①DbUtils工具类
主要功能:
1.关闭资源(Connection,Statement,ResultSet)
2.提交与回滚(commit,rooback)
3.加载驱动(loadDriver)
4.打印堆栈和警告(printStackTrace,printWarnings)
②处理器
RowProcessor接口:将ResultSet的行转换为各种类型的对象。
BasicRowProcessor:RowProcessor接口的基本实现。
BeanProcessor:将列名和Bean的属性名进行匹配,将ResultSet的列转换成Bean属性。
子类可以覆盖这些方法,在处理链中,实现自定义行为。
③ProxyFactory(代理工厂):
创建JDBC 7个接口的代理实现,避免了JDBC2和JDBC3接口的不兼容。
7个接口:Driver,Connection,Statement,PreparedStatement,CallableStatement,ResultSet,ResultSetMetaData
核心方法:newProxyInstance
public <T> T newProxyInstance(Class<T> type, InvocationHandler handler) {
return type.cast(Proxy.newProxyInstance(handler.getClass()
.getClassLoader(), new Class<?>[] { type }, handler));
}
④查询执行器
AbstractQueryRunner:QueryRunner 和AsyncQueryRunner的父类。
QueryRunner:查询处理器,执行query,update,batch操作。
AsyncQueryRunner:异步的查询处理器,执行query,update,batch操作。
⑤查询加载器
QueryLoader:查询集合的注册中心,多个相同的查询副本不必要全都加载到内存中。
这个实现加载属性文件,文件内容是 查询名到SQL的映射 。
主要方法:load,unload
⑥结果集迭代器
ResultSetIterator:把ResultSet包装进Iterator中。当你想存在一个非数据库应用层 带有模型中立的数据时,
这是非常有用的。这个实现类需要 ResultSet的isLast()方法已经被实现。
⑦ResultSetHandler接口
这个接口的实现类将ResultSet转换成其它的对象。
三、org.apache.commons.dbutils.handlers包和类的解读
ResultSetHandler接口的实现类(2个抽象类,9个具体类)
①KeydHandler
AbstractKeydHandler(KeyHandler):返回Map.
将ResultSet的行转换成对象,存储在Map中,在指定的Key下。
KeyHandler:返回Map<Map>.
将ResultSet的行转换成Map,存储在Map中,在指定的Key下。
②ListHandler
AbstractListHander(ArrayListHandler,ColumnListHandler,MapListHandler):
抽象类,简化ResultSetHandler类的开发,将ResultSet转换成List。
ArrayListHandler:将结果集转换成List<Object>.
ColumnListHandler:将结果集的某一列转换成List<Object>.
MapListHandler:将结果集转换成List<Map>.
③其它Handler
ArrayHandler:将结果集转换成Object[]。
BeanHandler<T>:将结果集的第一行转换成一个JavaBean.
BeanListHandler<T>:将结果集转换成List<Bean>.
MapHandler:将结果集的第一行转换成一个Map。
ScalarHandler:将结果集的某一列转换成Objects。
列通过columnIndex或columnName指定。
四、package org.apache.commons.dbutils.wrappers包和类的解读
包装类,给java.sql中的类增加功能。ResultSet的2个包装类。
①SqlNullCheckedResultSet:
包装ResultSet,使得调用每一个getXXX方法时,检查SQL NULL值。
如果通过getXXX方法获得的列值不是SQL NULL,返回列值,否则,代替值被返回。
该代替值默认为Java的null值,可以被类的实例覆盖。
使用示例:
②StringTrimedResultSet:
包装ResultSet,使得通过getString() and getObject()获得的String,经过String.trim()方法处理。
使用示例:
应用实践小结:
源码地址:http://download.csdn.net/detail/fansunion/4840246
一、cn.fansunion.dbutils.example,5个独立的例子。
1.AsyncUpdateExample.java,演示如何执行异步更新。
2.BeanHandlerExample.java,演示如何使用BeanHandler,将结果集的一行转换成一个JavaBean。
3.BeanListHandlerExample.java,演示BeanListHandler如何使用,BeanListHandler实现类将结果集转换成指定对象类型的集合。
4.InsertUpdateExample.java,演示如何执行添加和更新。
5.ResultSetHandlerExample.java,演示结果集处理器如何使用。
二、cn.fansunion.dbutils.example.connection,数据库连接。
1.ConnectionProvider.java,数据库连接的提供类。
2.PropertyReader.java,读取配置属性。
3.jdbc.properties 属性配置。
三、cn.fansunion.dbutils.example.common,公共资源。
1.DbUtilsExampleBase.java,DbUtils例子的父类,包含了一些常用的方法,获得连接、关闭连接、打印对象。
2.MyDataSource.java,自定义的数据源实现类。
3.Person.java,数据库表对应的实体类。
4.person.sql,数据库表建表脚本。
官方网站:http://commons.apache.org/dbutils/
下载地址:http://commons.apache.org/dbutils/download_dbutils.cgi
官方例子:http://commons.apache.org/dbutils/examples.html(可能有个别错误)
个人例子:http://download.csdn.net/detail/fansunion/4840246
源码研究小结
一、概述
版本:1.4
包:3个,org.apache.commons.dbutils,
org.apache.commons.handlers,
org.apache.commons.dbutils.wrappers
接口:2个
类:22个(不包含package-info.java)
package-info.java:3个
二、org.apache.commons.dbutils包和类的解读
包含一些些核心类和接口,DbUtils, QueryRunner和ResultSetHandler接口最值得关注。
①DbUtils工具类
主要功能:
1.关闭资源(Connection,Statement,ResultSet)
2.提交与回滚(commit,rooback)
3.加载驱动(loadDriver)
4.打印堆栈和警告(printStackTrace,printWarnings)
②处理器
RowProcessor接口:将ResultSet的行转换为各种类型的对象。
BasicRowProcessor:RowProcessor接口的基本实现。
BeanProcessor:将列名和Bean的属性名进行匹配,将ResultSet的列转换成Bean属性。
子类可以覆盖这些方法,在处理链中,实现自定义行为。
③ProxyFactory(代理工厂):
创建JDBC 7个接口的代理实现,避免了JDBC2和JDBC3接口的不兼容。
7个接口:Driver,Connection,Statement,PreparedStatement,CallableStatement,ResultSet,ResultSetMetaData
核心方法:newProxyInstance
public <T> T newProxyInstance(Class<T> type, InvocationHandler handler) {
return type.cast(Proxy.newProxyInstance(handler.getClass()
.getClassLoader(), new Class<?>[] { type }, handler));
}
④查询执行器
AbstractQueryRunner:QueryRunner 和AsyncQueryRunner的父类。
QueryRunner:查询处理器,执行query,update,batch操作。
AsyncQueryRunner:异步的查询处理器,执行query,update,batch操作。
⑤查询加载器
QueryLoader:查询集合的注册中心,多个相同的查询副本不必要全都加载到内存中。
这个实现加载属性文件,文件内容是 查询名到SQL的映射 。
主要方法:load,unload
⑥结果集迭代器
ResultSetIterator:把ResultSet包装进Iterator中。当你想存在一个非数据库应用层 带有模型中立的数据时,
这是非常有用的。这个实现类需要 ResultSet的isLast()方法已经被实现。
⑦ResultSetHandler接口
这个接口的实现类将ResultSet转换成其它的对象。
三、org.apache.commons.dbutils.handlers包和类的解读
ResultSetHandler接口的实现类(2个抽象类,9个具体类)
①KeydHandler
AbstractKeydHandler(KeyHandler):返回Map.
将ResultSet的行转换成对象,存储在Map中,在指定的Key下。
KeyHandler:返回Map<Map>.
将ResultSet的行转换成Map,存储在Map中,在指定的Key下。
②ListHandler
AbstractListHander(ArrayListHandler,ColumnListHandler,MapListHandler):
抽象类,简化ResultSetHandler类的开发,将ResultSet转换成List。
ArrayListHandler:将结果集转换成List<Object>.
ColumnListHandler:将结果集的某一列转换成List<Object>.
MapListHandler:将结果集转换成List<Map>.
③其它Handler
ArrayHandler:将结果集转换成Object[]。
BeanHandler<T>:将结果集的第一行转换成一个JavaBean.
BeanListHandler<T>:将结果集转换成List<Bean>.
MapHandler:将结果集的第一行转换成一个Map。
ScalarHandler:将结果集的某一列转换成Objects。
列通过columnIndex或columnName指定。
四、package org.apache.commons.dbutils.wrappers包和类的解读
包装类,给java.sql中的类增加功能。ResultSet的2个包装类。
①SqlNullCheckedResultSet:
包装ResultSet,使得调用每一个getXXX方法时,检查SQL NULL值。
如果通过getXXX方法获得的列值不是SQL NULL,返回列值,否则,代替值被返回。
该代替值默认为Java的null值,可以被类的实例覆盖。
使用示例:
Connection conn = // somehow get a connection Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT col1, col2 FROM table1"); // Wrap the result set for SQL NULL checking SqlNullCheckedResultSet wrapper = new SqlNullCheckedResultSet(rs); wrapper.setNullString("---N/A---"); // Set null string wrapper.setNullInt(-999); // Set null integer rs = ProxyFactory.instance().createResultSet(wrapper); while (rs.next()) { // If col1 is SQL NULL, value returned will be "---N/A---" String col1 = rs.getString("col1"); // If col2 is SQL NULL, value returned will be -999 int col2 = rs.getInt("col2"); } rs.close();
②StringTrimedResultSet:
包装ResultSet,使得通过getString() and getObject()获得的String,经过String.trim()方法处理。
使用示例:
ResultSet rs = // somehow get a ResultSet; // Substitute wrapped ResultSet with additional behavior for real ResultSet rs = StringTrimmedResultSet.wrap(rs); // Pass wrapped ResultSet to processor List list = new BasicRowProcessor().toBeanList(rs);
应用实践小结:
源码地址:http://download.csdn.net/detail/fansunion/4840246
一、cn.fansunion.dbutils.example,5个独立的例子。
1.AsyncUpdateExample.java,演示如何执行异步更新。
2.BeanHandlerExample.java,演示如何使用BeanHandler,将结果集的一行转换成一个JavaBean。
3.BeanListHandlerExample.java,演示BeanListHandler如何使用,BeanListHandler实现类将结果集转换成指定对象类型的集合。
4.InsertUpdateExample.java,演示如何执行添加和更新。
5.ResultSetHandlerExample.java,演示结果集处理器如何使用。
二、cn.fansunion.dbutils.example.connection,数据库连接。
1.ConnectionProvider.java,数据库连接的提供类。
2.PropertyReader.java,读取配置属性。
3.jdbc.properties 属性配置。
三、cn.fansunion.dbutils.example.common,公共资源。
1.DbUtilsExampleBase.java,DbUtils例子的父类,包含了一些常用的方法,获得连接、关闭连接、打印对象。
2.MyDataSource.java,自定义的数据源实现类。
3.Person.java,数据库表对应的实体类。
4.person.sql,数据库表建表脚本。
相关文章推荐
- DbUtils开源组件--源码研究和应用实践小结
- DbUtils开源组件--源码研究和应用实践小结
- DbUtils开源组件--源码研究和应用实践小结
- 分布式服务弹性框架“Hystrix”实践与源码研究(一)
- Phinecos(洞庭散人) 专注于开源技术的研究与应用 基于MFC的OpenGL绘图
- 软件系统开发中的组件框架技术研究、设计和应用
- Struts源码研究 - html-Cancel标签应用注意事项
- 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说
- 经济学研究方法兼谈夜光遥感数据在经济中的应用报告小结
- 小米开源便签Notes-源码研究(1)-导出功能整体思路
- 【 开源公告 】 Android 轻应用开发组件 RapidView 正式开源
- 小米开源便签Notes-源码研究(2)-定时提醒的便签
- 50款经典iPhone开源应用及源码
- 软件系统开发中的组件框架技术研究、设计和应用[转]
- 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说
- (4.2.10.3)【android开源组件】Android Volley完全解析(四),带你从源码的角度理解Volley
- 通用社区登陆组件技术分享(开源)下篇:OAuth 源码下载及原理解说
- MIS通用管理组件_MIS通用管理组件在企业业务流程整合中的应用与实践
- 谷歌开源 Google I/O应用源代码,展示Android最佳实践
- 开源组件:(3)dbutils