zoukankan      html  css  js  c++  java
  • 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 及其实现类

          接口 ResultSetHandler 只有一个需要实现的方法 handle(ResultSet rs),我的理解这个方法是处理结果集的一个入口,每个结果集转换类都在自己的 handle 方法中处理自己的事情,这个可从前面的源码1、2、3中看出来,都是调用实现类的handle方法,再返回结果。

          ResultSetHandler  的实现类(结果集转换类)在 handle 方法中实现对结果集的处理,大部分会涉及到另一个接口 RowProcessor 及其实现类 BasicRowProcessor

          2、RowProcessor,关系图如下:

    RowProcessor

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

          3、ResultSetHandler 和 RowProcessor 的关系

           diagram2

          图虽然有点乱,凑合看也能看清楚。大部分的结果集都持有一个 RowProcessor 接口的引用。需要注意的是 ArrayHandler 这个类,因为其他类 RowProcessor 的引用都是从这个类获取的,这个类建立了 RowProcessor 实现类 BasicRowProcessor 的对象。

          需要注意其中的3个抽象类(AbstractKeyedHandler、AbstractListHandler、BaseResultSetHandler),它们的派生类才是可以使用的结果转换类。根据文档的说明,如果官方提供的这些转换类都不能满足你的要求,可以通过继承 BaseResultSetHandler 实现自己的结果集转换类。

  • 相关阅读:
    IDEA怎么自动生成serialVersionUID
    使用gcc的-l参数的时候,怎么查找函数所在库的位置
    有一个10 G 的文件,你只有有一个 2 G 的内存,找出重复最多的数字
    gdb调试使用教程
    使用autoscan自动生成makefile文件
    如何查看yum命令安装的软件的安装目录
    手机QQ邮箱app有未读邮件,图标右上角没有红色小圆点的解决方案
    谷歌google帐号(邮箱)注册时,提示此电话号码无法用于验证
    Notepad++编写的shell脚本在linux下无法执行的解决方法
    linux如何配置普通用户(非root用户)的sudo权限
  • 原文地址:https://www.cnblogs.com/myit/p/4269165.html
Copyright © 2011-2022 走看看