DBUtils
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
- QueryRunner中提供对sql语句操作的API.
- ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
- DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner
1. 提供数据源
1.1 构造方法
QueryRunner(DataSource) 创建核心类,并提供数据源,内部自己维护Connection
1.2 普通方法
update(String sql , Object … params) 执行DML语句
query(String sql , ResultSetHandler , Object … params) 执行DQL语句,并将查询结果封装到对象中。
2. 提供连接
2.1 构造方法
QueryRunner() 创建核心类,没有提供数据源,在进行具体操作时,需要手动提供Connection
2.2 普通方法
update(Connection conn , String sql , Object … params) 使用提供的Connection,完成DML语句
query(Connection conn , String sql , ResultSetHandler , Object … params) 使用提供的Connection,执行DQL语句,并将查询结果封装到对象中。
3. 增删改查
3.1 增
public void insert() throws SQLException{ //将sql和实际参数 进行抽取 //1 核心类 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); //2 执行update方法 String sql = "insert into product(pid,pname,price,category_id) values(?,?,?,?)"; Object[] params = { 990,"测试",100,"c009" }; int r = queryRunner.update(sql,params); }
3.2 更新
public void update() throws SQLException{ //1 核心类 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); //2 准备sql语句 String sql = "update product set pname=?,price=?,category_id=? where pid=?"; //3 准备实际参数 Object[] params = {"芒果99","998","c009",13}; //4 执行 int r = queryRunner.update(sql, params); }
3.3 删除
public void delete() throws SQLException{ QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "delete from product where pid = ?"; Object[] params = {99}; int r = queryRunner.update(sql, params); }
3.4 查找 query(String sql, ResultSetHandler rsh, Object… params)
3.4.1 ResultSetHandler结果集处理类


JavaBean就是一个类,在开发中常用语封装数据。具有如下特性 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。 提供私有字段:private 类型 字段名; 提供getter/setter方法: 提供无参构造
- BeanHandler
/** * 查询数据表结果集处理其中一种方式: * BeanHandler处理方式 * 将数据表的结果集第一行数据,封装成JavaBean类的对象 * 构造方法: * BeanHandler(Class<T> type) * 传递一个Class类型对象,将结果封装到哪个类的对象呢 * ZhangWu类的Class对象 */ @Test public void demo01() throws SQLException{ // 通过id查询详情,将查询结果封装到JavaBean product //1核心类 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); //2 sql语句 String sql = "select * from product where pid = ?"; //3 实际参数 Object[] params = {6}; //4 查询并封装 Product product = queryRunner.query(sql, new BeanHandler<Product>(Product.class), params); System.out.println(product); }
- BeanListHandler.
/** * 查询数据表结果集处理其中一种方式: * BeanListHandler处理方式 * 将数据表的每一行数据,封装成JavaBean类对象 * 多行数据了,多个JavaBean对象,存储List集合 */ @Test public void demo02() throws SQLException{ //查询所有,将每一条记录封装到一个JavaBean,然后将JavaBean添加到List中,最后返回List,BeanListHandler QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; Object[] params = {}; List<Product> list = queryRunner.query(sql, new BeanListHandler<Product>(Product.class), params); for(Product product : list){ System.out.println(product); } }
- ScalarHander
/** * 查询数据表结果集处理其中一种方式: * ScalarHandler处理方式 * 处理单值查询结果,执行的select语句后,结果集只有1个 */ @Test public void demo03() throws SQLException{ // ScalarHandler : 用于处理聚合函数执行结果(一行一列) // * 查询总记录数 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select count(*) from product"; Long obj = queryRunner.query(sql, new ScalarHandler<Long>()); //System.out.println(obj.getClass()); System.out.println(obj); }
- MapHandler
/** * 查询数据表结果集处理其中一种方式: * MapHandler处理方式 * 将数据表结果集的第一行数据,封装成Map集合 * 键: 数据表中的列 * 值: 这个列中的数据 * * 处理方式的Map集合,是LinkedHashMap的子类 */ @Test public void demo04() throws SQLException{ // MapHandler : 将查询到的一条记录,封装到Map中,map.key=字段名,map.value=值 // * 主要用途:多表操作、将数据转换json 等 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product where pid = ?"; Object[] params = {6}; Map<String,Object> map = queryRunner.query(sql, new MapHandler(), params); System.out.println(map); // 将Map数据封装到指定JavaBean }
/** * 查询数据表结果集其中一种处理方式: * MapListHandler处理方式 * 将数据表的结果集的每一行封装成Map集合 * 数据表多行数据,出现多个Map集合,存储List集合 */ @Test public void demo05() throws SQLException{ // MapListHandler : 查询所有数据,将每一条记录封装到Map中,然后将Map添加到List中,最后返回List // * 主要用途:多表操作 等 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler()); for(Map<String,Object> map : list){ System.out.println(map); } }
- ArrayHandler
/** * 查询数据表结果集处理其中一种方式: * ArrayHandler处理方式 * 将数据表中的第一行数据,存储到对象数组Object[]中 * * 注意: 获取查询后的第一行数据,如果查询不到结果集,返回的对象数组的length=0 */ @Test public void demo06() throws SQLException{ // ArrayHandler :查询一条记录,将数据封装到数组中 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product where pid = ?"; Object[] params = {6}; Object[] arr = queryRunner.query(sql, new ArrayHandler(), params); System.out.println(arr); System.out.println(Arrays.toString(arr)); }
- ArrayListHandler
/** * 查询数据表结果集处理其中一种方式: * ArrayListHandler处理方式 * 将数据表中的每一行数据,存储到一个对象数组Object[]中 * 而数据表中会有多行数据,产生多个对象数组, 存储到List集合中 */ @Test public void demo07() throws SQLException{ // ArrayListHandler :查询所有,将每一条记录封装到数组中,然后添加到List,最后返回list QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; List<Object[]> list = queryRunner.query(sql, new ArrayListHandler()); for(Object[] arr : list){ System.out.println(Arrays.toString(arr)); } }
- KeyedHandler
@Test public void demo08() throws SQLException{ // KeyedHandler : new KeyedHandler("字段名称"),查询所有,将查询结果封装到Map中 // * map.key=为指定“字段名称”对应的值 // * map.value=为当前整条记录所有的值,数据为Map<字段名,值> // 类型 Map<String , Map<String,Object> > QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; Map<String,Map<String,Object>> map = queryRunner.query(sql, new KeyedHandler<String>("pname")); for(Map.Entry<String, Map<String,Object>> entry : map.entrySet()){ System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }
- ColumnListHandler
/** * 查询数据表结果集处理其中一种方式: * ColumnListHandler处理方式 * 将查询数据表结果集中的某一列数据,存储到List集合 * 哪个列不清楚,数据类型也不清楚, List<Object> * ColumnListHandler构造方法 * 空参数: 获取就是数据表的第一列 * int参数: 传递列的顺序编号 * String参数: 传递列名 * * 创建对象,可以加入泛型,但是加入的数据类型,要和查询的列类型一致 */ @Test public void demo09() throws SQLException{ // ColumnListHandler : 查询指定一列数据 QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from product"; List<String> list = queryRunner.query(sql, new ColumnListHandler<String>("pname")); System.out.println(list); }
参考:https://blog.csdn.net/Christina_cyw/article/details/114004043

浙公网安备 33010602011771号