30.JDBC-DbUtils组件入门

Apache Commons DbUtils是一个简单的JDBC工具库,它降低了使用JDBC的复杂性,提高了编码效率,尤其适合不喜欢Hibernate的开发者。DbUtils提供了QueryRunner核心工具类,支持更新和查询操作,包括批处理。此外,它还提供了一些结果集处理对象,如BeanHandler、BeanListHandler等,方便将查询结果转换为Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选

DbUtils组件,

  1. 简化jdbc操作
  2. 下载组件,引入jar文件 : commons-dbutils-1.6.jar

1.更新常用的api

|-- DbUtils   关闭资源、加载驱动

|-- QueryRunner   组件的核心工具类:定义了所有的与数据库操作的方法(查询、更新)

         Int  update(Connection conn, String sql, Object param);   执行更新带一个占位符的sql

         Int  update(Connection conn, String sql, Object…  param); 执行更新带多个占位符的sql

         Int[]  batch(Connection conn, String sql, Object[][] params)        批处理

 

        Int  update( String sql, Object param); 

        Int  update( String sql, Object…  param);

        Int[]  batch( String sql, Object[][] params)      

注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);

public class App_update {

	private Connection conn;

	// 1. 更新
	@Test
	public void testUpdate() throws Exception {
		String sql = "delete from admin where id=?";
		// 连接对象
		conn = JdbcUtil.getConnection();

		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		qr.update(conn, sql, 26);

		// 关闭
		DbUtils.close(conn);
	}

	// 2. 批处理
	@Test
	public void testBatch() throws Exception {
		String sql = "insert into admin (userName, pwd) values(?,?)";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 批量删除
		qr.batch(conn, sql, new Object[][]{ {"jack1","888"},{"jack2","999"}  });
		
		// 关闭
		conn.close();
	}
}

2.DbUtils提供的封装结果的一些对象:

 

   T  query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)   查询方法

       1)BeanHandler: 查询返回单个对象

      2)BeanListHandler: 查询返回list集合,集合元素是指定的对象

      3)  ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]

      4)  ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中

       5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)

      6)  MapHandler  查询返回结果的第一条记录封装为map

public class App_query {

	private Connection conn;

	// 一、查询, 自定义结果集封装数据
	@Test
	public void testQuery() throws Exception {
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询
		Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {

			// 如何封装一个Admin对象
			public Admin handle(ResultSet rs) throws SQLException {
				if (rs.next()) {
					Admin admin = new Admin();
					admin.setId(rs.getInt("id"));
					admin.setUserName(rs.getString("userName"));
					admin.setPwd(rs.getString("pwd"));
					return admin;
				}
				return null;
			}

		}, 29);

		// 测试
		System.out.println(admin);
		// 关闭
		conn.close();

	}
	
	// 二、查询, 使用组件提供的结果集对象封装数据
	
	// 1)BeanHandler: 查询返回单个对象
	@Test
	public void testQueryOne() throws Exception {
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询返回单个对象
		Admin admin =  qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
		
		System.out.println(admin);
		conn.close();
	}
	
	// 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
	@Test
	public void testQueryMany() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询全部数据
		List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
		
		System.out.println(list);
		conn.close();
	}
	@Test
//	3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
//	4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
//	5) ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
//	6) MapHandler  查询返回结果的第一条记录封装为map
	public void testArray() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		//Object[] obj = qr.query(conn, sql, new ArrayHandler());
		//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
		Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}
	
	
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值