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就是一个类,在开发中常用语封装数据。具有如下特性

  1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
  2. 提供私有字段:private 类型 字段名;
  3. 提供getter/setter方法:
  4. 提供无参构造
  1. 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);
		
	}
  1. 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);
		}
	}

  1. 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);
	}

  1. 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
	}

  1. MapListHandler
/**
	 * 查询数据表结果集其中一种处理方式:
	 *   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);
		}
	}

  1. 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));
	}

  1. 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));
		}
	}

  1. 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());
		}
		
	}

  1. 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);
	}

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值