DbUtils(一) 结果集概览
来源:互联网 发布:口袋弹弓 淘宝 编辑:程序博客网 时间:2024/05/29 13:52
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 结果集实例
- dbutils使用之多结果集
- DbUtils(二) 结果集实例
- QueryRunner(DbUtils) 结果集实例
- DbUtils(二) 结果集实例
- xUtils系列之DbUtils-概览
- DBUtils学习笔记一DbUtils
- DbUtils(二) 结果集实例——handler应用
- dbUtils 常用的5个结果集处理实现
- DBUtils 查询操作的九种结果集处理
- JavaWeb之DBUtils(一)QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作
- DBUtils使用详解一
- Apache DBUtils入门(一)
- DBUtils学习(一)
- DbUtils学习(一)
- DBUtils使用详解一
- ICLR 2018论文评审结果出炉:一文概览论文 TOP 5
- Scanner及String类总结
- php内存管理之垃圾回收机制
- 修改hosts不必重启 立刻生效
- 第四周:[Leetcode]210. Course Schedule II
- 【C++】继承总结
- DbUtils(一) 结果集概览
- Redis数据库安装以及碰到的问题解决
- CPU内部架构与工作原理
- SANGFOR产品笔记
- 树莓派摄像头控制部分
- 关于Jquery对象的说明(转)
- Win7怎么安装?推荐3种Windows7安装方法
- Android 怎么把imageview 转为Bitmap
- 写给Android开发者的混淆使用手册