15. jdbc 工具包-dbUtils

jdbc 系列文章列表, 请查看目录: 《jdbc学习笔记》

1. DbUtils 简介

DbUtils 是Apache 组织下的一个jdbc 操作的工具包, 更新截止于2017年7月. 虽然说笔者认为这个工具包封装的API 并不是太好用, 不能达到笔者的预期, 但是笔者认为还是值得花点儿时间学习和研究一下的. 原因有两个方面: 一方面是可能工作项目中有人使用了DbUtis工具包, 另一方面是可以学习DbUtilsAPI的封装方法, 以及源代码, 自己开发一个适合自己开发习惯的工具包.

1.1 QueryRunner核心API

  • QueryRunner 是DbUtils 的查询器, 用于执行增删改查sql
  • QueryRunner 的API 有两类, 一种是包含Connection 形参的, 另一种是不包含的. 不包含的API 以废弃, 所以只需要关注包含Connection的API 即可.
  • QueryRunner 的常用API 列表:
方法签名 方法描述
public T insert(Connection conn, String sql, ResultSetHandler rsh, Object… params) 执行插入sql, 支持返回自增主键
public int update(Connection conn, String sql, Object param) 执行/删除更新sql
public T query(Connection conn, String sql, ResultSetHandler rsh, Object… params) 执行查询sql, 支持结果集封装, 返回多种格式的返回结果
public T insertBatch(Connection conn, String sql, ResultSetHandler rsh, Object[][] params) 执行批量插入, 支持返回批量自增主键
public int[] batch(Connection conn, String sql, Object[][] params) 执行批量更新/删除sql, 返回每条sql执行结果影响的记录数量
public List execute(Connection conn, String sql, ResultSetHandler rsh, Object… params) 执行存储过程等非CRUD sql

1.2 结果解析器

ResultSetHandler 是DbUtils 用于解析sql查询结果ResultSet的接口, DbUtils提供了多种实现类, 用于处理多种返回结果.

实现类 描述 缺点
ScalarHandler 返回单行记录, 每行记录只解析第一个字段 返回类型根据字段类型不同而不同, 不能根据代码做自动转换
ColumnListHandler 返回多行记录, 为每行记录采用ColumnListHandler 解析策略 同ColumnListHandler
BeanHandler 返回单行记录, 将每行记录转换为javabean. 列名和java属性名必须完全一致,一一对应. 不支持别名一致
BeanListHandler 返回多行记录, 为每行记录采用BeanHandler策略解析为单独的javabean 同BeanHandler
MapHandler 返回单行记录, 将每行记录转换为由列名和值组成的键值对的map key为列名, 不支持别名
MapListHandler 返回多行记录, 为每行记录采用MapHandler策略解析为map对象 同MapListHandler

2. 测试

为了简单测试DbUtils的API, 笔者创建一张简单的表来测试. JavaBean 中属性和字段名一一对应!

字段名 类型 描述
id int 主键自增
name varchar(120) 用户名
passowrd varchar(120) 密码

2.1 获取数据库链接

  • 由于每个测试用例都需要获取数据库连接, 因此抽出来方法
  • 具体获取数据库连接方式多种多样, 自行选择即可
private Connection connection;

private QueryRunner queryRunner;

@Before
public void setUp(){
   
    // 每个测试用例执行前,先获取数据库连接, 并创建queryRunner对象
    connection = DbConnUtil.getConnection();
    queryRunner = new QueryRunner();
}

2.2 插入操作

@Test
public void test_insert() throws Exception {
   

    String sql = "insert into t_user(name, password) values(?,?)";

    long autoId = queryRunner.insert(connection, sql, new ScalarHandler<>(), "zhangsan", "123456");

    System.out.println("自增id:" + autoId)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值