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 ...
随机推荐
- js的数据格式之json
//json数据格式语法:1 数据在名称/值对中2 数据由逗号分隔3 花括号保存对象4 方括号保存数组 详情请查看:js的数据格式之json
- for循环中的条件执行循序
问题: public class Main { public static void main(String[] args) { int i,n,length = 0; for(i=1;length& ...
- Linux ssh 不需要输入密码的方法
采用证书的方法可以解决ssh不需要输入密码的问题. 本文采用CentOS的操作系统,创建SSH的key,并在两台或多台机器间实现信任.从而实现SSH登录不需要输入密码的功能. 首先,在一台机器上创建S ...
- IIC编程1:i2c-tools使用
安装: apt-get install libi2c-dev i2c-tools 检测i2c总线数目 用i2cdetect检测有几组i2c总线在系统上: i2cdetect -l 可以看到系统中有9组 ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- shell入门-awk-1
awk对于sed grep的优势在于分段,把分隔符分割成一小段一小段,针对段进行匹配,替换,操作,逻辑判断,比较...等 awk的基本操作 [root@wangshaojun ~]# awk -F ' ...
- Mach系统
——杂言:最近升级了把山狮升级到了10.9mavericks,比较抓我注意力的就是新的活动监视器.新的监视器里对统计分类很严,双击某一进程,即可跳出一个详情对话框.其中里面就有记录着Mach相关的信息 ...
- BeanFactory和ApplicationContext的介绍
------------------siwuxie095 Spring 通过一个配置文件描述 Bean 和 Bean 之间的依赖关系, 利用 J ...
- windows7 8 mac 安装docker
安装: 下载 DockerToolbox.exe 苹果的也可以用这个链接下载 一直点击下一步(网络要求很高安装时,网络不好会报错 多点几次就好了)
- 孙鑫VC学习系列教程
教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...