阅读文本大概需要 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 进行查询:
领取专属 10元无门槛券
私享最新 技术干货