记录自己对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(一) 结果集概览的更多相关文章

  1. DbUtils(二) 结果集实例

    单行数据处理:ScalarHandler    ArrayHandler    MapHandler    BeanHandler 多行数据处理:BeanListHandler    Abstract ...

  2. 使用 dbutils 的结果集包装类 StringTrimmedResultSet

    1.功能 StringTrimmedResultSet 的功能是去掉结果集中数据的前后空格,这个方法是在取结果的时候处理. 2.使用 一般在新建 QueryRunner 对象的时候使用: QueryR ...

  3. QueryRunner(DBUtils) 结果集实例

    转自:http://www.cnblogs.com/myit/p/4272824.html#   单行数据处理:ScalarHandler    ArrayHandler    MapHandler  ...

  4. DBUtils使用技巧

    BbUtils(一) 结果集概览:http://www.cnblogs.com/myit/p/4269165.html DbUtils(二) 结果集实例:http://www.cnblogs.com/ ...

  5. DBUtils学习

    1.       DBUtils是JDBC的简单封装,可以和JDBC混合使用. 2.       DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次 ...

  6. Apache DBUtils使用总结 【转】

    Apache DBUtils使用总结   DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味. ...

  7. JdbcUtils 系列1

    1.开发前准备 创建java pro为dbutils_1,没有lib目录,建一个即可 /dbutils_1/lib/mysql-connector-java-5.0.8-bin.jar 数据库搭建c3 ...

  8. PA教材提纲 TAW10-1

    Unit1 SAP systems(SAP系统) 1.1 Explain the Key Capabilities of SAP NetWeaver(解释SAP NetWeaver的关键能力) Rep ...

  9. javaweb笔记全套

    Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace  选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Pr ...

随机推荐

  1. 51nod 1450 闯关游戏——期望dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办. ...

  2. PythonPath在Windows 下的设置

    今天在调试Evernote SDK时, 遇到PythonPath的问题. 查了很多资料,有说用系统环境变量添加PythonPath, 有说在注册表中的PythonPath添加新Default字段, 但 ...

  3. poj 1519 Digital Roots (计算根数字)

    一.Description The digital root of a positive integer is found by summing the digits of the integer. ...

  4. NorthSJ项目零碎知识点

    1 div显示纵向滚动条: <div style="overflow-y:auto;overflow-x:hidden;"></div> 2 FineUI的 ...

  5. 查看,检查,修复pg的命令

    标签(空格分隔): ceph,ceph运维,pg 如果集群状态是HEALTH_ERR 并且有pgs inconsistent,需要进行如下操作: 1. 通过下面的命令查看哪些pg状态不一致: # ce ...

  6. 分页sql汇总

    1.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>= ...

  7. How to Write a Spelling Corrector用java 写拼写检查器 Java实现 以备查验

    import java.io.*;import java.util.*;import java.util.regex.*; class Spelling { private final HashMap ...

  8. 【总结整理】关于Json的解析,校验和验证

    var jasondata='{"staff": [{"name":"红旗","age":90}, {"nam ...

  9. 第四篇 express 安装esasticsearch

    1.首先,我们创建一个Express应用程序!我将使用express.js生成器. npm install -g express-generator express ./autocompleter c ...

  10. Flask14 渲染问题、API、项目文档

    3 前端渲染和后端渲染 这两种渲染都属于动态页面 区分前后端渲染的关键点是站在浏览器的角度 3.1 后端渲染 浏览器请求服务器后获取到的是完整的HTML页面(即:后台已经组装好HTML文件啦),利用f ...