学习
实践
活动
工具
TVP
写文章

你问我要去向何方,我指着大海的方向

阅读文本大概需要 9 分钟。

通过前几篇的介绍,我们已经知道了

JDBC 设计的思想

,封装了获取连接的工具类,以及数据库连接池的规范。今天要给大家介绍的是「dbutils」

传统 JDBC 方式操作数据库,会有大量的重复代码。dbutils 可以帮助我们简化JDBC操作。

dbutils原理

传统 JDBC 对数据库进行增删查改操作,存在大量重复的代码。

我们采用 dbutils,简化JDBC操作

对增删改进行抽取

dbutils 就是简化 jdbc 操作的一个工具,他依然需要用到 连接池 和 sql 语句。

dataSource作为成员变量,通过构造方法赋值

sql语句中的参数占位符要和params对应

测试 增删改

对 查询 进行抽取

对查询进行抽取,就是对结果集的操作。

但是,我们在定义方法时还不清楚具体要返回的数据类型

不知道要获取结果集中的什么数据,也不知道要封装成什么样的数据类型。

具体怎么封装?

策略:定义一个接口,把具体的封装构造方式,交由方法的调用者完成。

执行查询,把结果封装到对象中

结果集处理器接口: 该接口在被调用的时候再去实现

这样我们 dbUtils 中的 query 方法就可以这样定义了,由 query 方法的使用者提供接口的具体实现:

这时如果我们调用了 query 查询方法,会要求调用者自己去实现 ResultSetHandler 接口:

但是,每次使用查询方法,还要提供匿名内部类实现 ResultSetHandler 接口还是有点不方便。是的,我们还可以利用反射的方法,提供常用的接口处理器:

apache dbutils 组件

其实我们刚才费大功夫写的 DBUtils 类,就是apache下的commons组件中的dbutils 核心QueryRunner类的基本结构.

QueryRunner

update(String sql,Object…params)

----> 可以执行增、删、改语句

query(String sql,ResultSetHandler rsh,Object…params)

----> 执行查询操作(它会先得到ResultSet,然后调用rsh对象的handle()方法,把rs转换成需要的类型).

ResultSetHandler接口的实现类

dbutils 也为我们提供了一些 ResultSetHandler 接口的实现类

BeanHandler(单行)**

把单行数据转换成指定类型的 javaBean 对象,要求类的成员变量跟数据库的列名一致。

BeanListHandler(多行)**

把多行数据,转换成一堆javaBean对象,放在一个 List 集合中,要求类的成员变量跟数据库的列名一致。

ScalarHandler(单行单列)

通常用于 select count(*) from table 语句!结果集是单行单列的,返回一个Object

测试使用 QueryRunner 进行查询:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G1J97W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券