DbUtils(一) 结果集概览
记录自己对DbUtils的学习和了解
我感觉Dbutils用的最多的就是对查询结果集的处理,就以这个开始了解Dbutils库。
查看源代码发现结果集的转换主要用于query,insert,insertBatch方法。
// 仅仅列出QueryRunner类的相关代码,其他略过
//-----------源码1 query方法 ------------------
stmt = this.prepareStatement(conn, sql);
this.fillStatement(stmt, params);
rs = this.wrap(stmt.executeQuery());
result = rsh.handle(rs); // 处理结果集 //-----------源码2 insert方法 ------------------
stmt = conn.prepareStatement(sql, tatement.RETURN_GENERATED_KEYS);
this.fillStatement(stmt, params);
stmt.executeUpdate();
ResultSet resultSet = stmt.getGeneratedKeys();
generatedKeys = rsh.handle(resultSet); // 处理结果集 //-----------源码3 insertBatch方法 ------------------
ResultSet rs = stmt.getGeneratedKeys();
generatedKeys = rsh.handle(rs); // 处理结果集
对ResultSet的转换主要围绕两个接口展开(ResultSetHandler<T> 和 RowProcessor)。
1、ResultSetHandler<T> ,关系图如下:

接口 ResultSetHandler 只有一个需要实现的方法 handle(ResultSet rs),我的理解这个方法是处理结果集的一个入口,每个结果集转换类都在自己的 handle 方法中处理自己的事情,这个可从前面的源码1、2、3中看出来,都是调用实现类的handle方法,再返回结果。
ResultSetHandler 的实现类(结果集转换类)在 handle 方法中实现对结果集的处理,大部分会涉及到另一个接口 RowProcessor 及其实现类 BasicRowProcessor。
2、RowProcessor,关系图如下:

RowProcessor 接口有4个需要实现的方法,具体用途可以很直观的从方法名中看出来。这几个方法都在结果转换类的 handle 方法中调用。需要注意如果需要将结果集转换为Bean,那么还会涉及到一个类 BeanProcessor 的使用。
3、ResultSetHandler 和 RowProcessor 的关系

图虽然有点乱,凑合看也能看清楚。大部分的结果集都持有一个 RowProcessor 接口的引用。需要注意的是 ArrayHandler 这个类,因为其他类 RowProcessor 的引用都是从这个类获取的,这个类建立了 RowProcessor 实现类 BasicRowProcessor 的对象。
需要注意其中的3个抽象类(AbstractKeyedHandler、AbstractListHandler、BaseResultSetHandler),它们的派生类才是可以使用的结果转换类。根据文档的说明,如果官方提供的这些转换类都不能满足你的要求,可以通过继承 BaseResultSetHandler 实现自己的结果集转换类。
DbUtils(一) 结果集概览的更多相关文章
- DbUtils(二) 结果集实例
单行数据处理:ScalarHandler ArrayHandler MapHandler BeanHandler 多行数据处理:BeanListHandler Abstract ...
- 使用 dbutils 的结果集包装类 StringTrimmedResultSet
1.功能 StringTrimmedResultSet 的功能是去掉结果集中数据的前后空格,这个方法是在取结果的时候处理. 2.使用 一般在新建 QueryRunner 对象的时候使用: QueryR ...
- QueryRunner(DBUtils) 结果集实例
转自:http://www.cnblogs.com/myit/p/4272824.html# 单行数据处理:ScalarHandler ArrayHandler MapHandler ...
- DBUtils使用技巧
BbUtils(一) 结果集概览:http://www.cnblogs.com/myit/p/4269165.html DbUtils(二) 结果集实例:http://www.cnblogs.com/ ...
- DBUtils学习
1. DBUtils是JDBC的简单封装,可以和JDBC混合使用. 2. DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次 ...
- Apache DBUtils使用总结 【转】
Apache DBUtils使用总结 DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味. ...
- JdbcUtils 系列1
1.开发前准备 创建java pro为dbutils_1,没有lib目录,建一个即可 /dbutils_1/lib/mysql-connector-java-5.0.8-bin.jar 数据库搭建c3 ...
- PA教材提纲 TAW10-1
Unit1 SAP systems(SAP系统) 1.1 Explain the Key Capabilities of SAP NetWeaver(解释SAP NetWeaver的关键能力) Rep ...
- javaweb笔记全套
Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace 选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Pr ...
随机推荐
- 数据schemaAvro简介
文章结束给大家来个程序员笑话:[M] 最近在研究Thrift和Avro以及它们的区分,通过各种渠道搜集资料,现整顿出有关Avro的一些资料,方便当前参考. 一.弁言 1. 简介 Avro是Hadoop ...
- C#创建DataTable的语法
namespace EazyCMS.Web.admin { public partial class ceshi1 : System.Web.UI.Page { protected void Page ...
- JavaScript中对象的属性
在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...
- DotNetBar 第三方控件使用
1.BalloonTip(气泡提醒) 效果: 代码: balloonTip1.SetBalloonCaption(txtusername, "提示"); ba ...
- mysql auto reset
参数说明: •相关参数说明: •dataSource: 要连接的 datasource (通常我们不会定义在 server.xml) defaultAutoCommit: 对于事务是否 autoCom ...
- shell入门-awk-1
awk对于sed grep的优势在于分段,把分隔符分割成一小段一小段,针对段进行匹配,替换,操作,逻辑判断,比较...等 awk的基本操作 [root@wangshaojun ~]# awk -F ' ...
- HTTP返回码中301与302的区别
一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved). 302 ...
- free查看内存情况
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区. free [option] -b:以Byte为单位显示内存使用情况: -k:以KB为单位显 ...
- 关于ArcGis for javascript整合百度地图 天地图 高德地图进行搜索
1.ArcGis for javascript整合百度地图搜索 1.1.首先引入百度地图的api <!-- 引入百度地图API --> <script type="text ...
- R: data.frame 数据框的:查询位置、排序(sort、order)、筛选满足条件的子集。。
################################################### 问题:数据框 data.frame 查.排序等, 18.4.27 怎么对数据框 data.f ...