十、JDBC--数据操作层(DbUtils组件)(十)

一、DbUtils组件


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

二、DbUtils组件的使用


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

三、DbUtils组件的API

	
	DbUtils组件的核心类是QueryRunner 对象。
	该对象有两个方法update()和query()。这两个方法对应了多个方法重载,来适应不同的场景。
			
			update(),执行增、删、改sql。
			
			query(),执行查询方法。
				
	+++ DbUtils组件的API
	
		|-- DbUtils   关闭资源、加载驱动
					
					
					DbUtils.loadDriver(driverClassName)
						加载驱动,相当于  DriverManager.registerDriver(new com.mysql.jdbc.Driver());
					
					DbUtils.close(conn);
					DbUtils.close(stmt);
					DbUtils.close(rs);
						关闭资源对象。		


		|-- QueryRunner   组件的核心工具类:
						  定义了所有的与数据库操作的方法(查询、更新)
					
					|-- 更新 
							执行更新带一个占位符的sql
							Int  update(Connection conn, String sql, Object param);
							
							执行更新带多个占位符的sql
							Int  update(Connection conn, String sql, Object…  param); 
						    
						    批处理	
							Int[]  batch(Connection conn, String sql, Object[][] params)        
	


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


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

		+++ DbUtils提供的封装结果的一些对象:
	
				1) BeanHandler: 查询返回单个对象
				
				2) BeanListHandler: 查询返回list集合,集合元素是指定的对象
				
				3)  ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
				
				4)  ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
				
				5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
				
				6)  MapHandler  查询返回结果的第一条记录封装为map

项目优化
对之前的注册功能,优化,引入dbutils组件!
要求:
	BaseDao.java
		查询、更新的通用的方法!
	其他的dao就继承baseDao即可!


3.1 update更新操作(增、删、改)

3.1.1 执行更新,不带有参数
	//1.执行更新,不带有参数
	@Test
	public void demo1() throws SQLException {
		
		String sql="update student set id=12";

		
		//连接对象
		Connection conn = JdbcUtil.getConn();
		
		//创建DbUtils核心工具类对象
		QueryRunner  qr=new QueryRunner();
		int row = qr.update(conn, sql);
		
		
		// 关闭
		DbUtils.close(conn);
		
		System.out.println(row==0?"插入失败":"插入成功");

	}
3.1.2 执行更新,带有参数
	
	//2.执行更新,带有参数
	@Test
	public void demo() throws SQLException {
		
		String sql="insert into student(name,chinese) values(?,?)";

		//连接对象
		Connection conn = JdbcUtil.getConn();
		
		//创建DbUtils核心工具类对象
		QueryRunner  qr=new QueryRunner();
		int row = qr.update(conn, sql, "小白",2);
		
		
		// 关闭
		DbUtils.close(conn);
		
		System.out.println(row==0?"插入失败":"插入成功");
	}
	
3.1.3 执行更新,批处理
	
		//3.批处理
		@Test
		public void testBatch() throws Exception {
			String sql="insert into student(name,chinese) values(?,?)";
			Connection conn = JdbcUtil.getConn();
		
			
			//创建DbUtils核心工具类对象
			//批量新增
			QueryRunner qr = new QueryRunner();
			qr.batch(conn, sql, new Object[][]{ {"jack1",12},{"jack2",11}  });
			
			// 关闭
			conn.close();
		}

3.2 query查询操作(查)

在这里插入图片描述

3.2.1 自定义结果集处理器


public class DbUtilsDemo {
	
	//1.执行查询 ,自定义结果集处理器
	@Test
	public void demo1() throws SQLException {
		
		String sql="select * from student where  id=12";

		
		//连接对象
		Connection conn = JdbcUtil.getConn();
		
		//创建DbUtils核心工具类对象
		QueryRunner  qr=new QueryRunner();
		
		//执行查询
		Student stu = qr.query(conn, sql, new ResultSetHandler<Student>() {
			
			/**
			 * 自定义结果集处理器
			 */
			@Override
			public Student handle(ResultSet rs) throws SQLException {
				
				Student s=null;
				
				while(rs.next()) {
					s=new Student();
					
					s.setId(rs.getInt(1));
					s.setName(rs.getString(2));
					s.setChinese(rs.getInt(3));
				}
				
				return s;
			}
			
		});
		
		
		// 关闭
		DbUtils.close(conn);
		
		
		System.out.println(stu);
		
	}
3.2.2 结果集处理器 - BeanHandler (返回单个对象,取结果集中的第一条数据封装)
	
	//2.执行查询 ,使用系统自带的结果集处理器 -- BeanHandler
	@Test
	public void demo2() throws SQLException{
		
		String sql="select * from student where id = ?";
		Connection conn = JdbcUtil.getConn();
		
		//创建DbUtils组件核心类
		QueryRunner qr=new QueryRunner();
		
		//执行查询,
		Student stu = qr.query(conn, sql, new BeanHandler<Student>(Student.class), 12);
		
		DbUtils.close(conn);
		
		System.out.println(stu);
	}
	BeanHandler 获取结果集的第一条数据,将其封装为对应的对象。
	
	控制台打印:
					Student [id=12, name=xx, chinese=12]

3.2.3 结果集处理器 - BeanListHandler(返回多个对象,封装结果集)
	
		//3.执行查询 ,使用系统自带的结果集处理器 -- BeanListHandler
		@Test
		public void demo3() throws SQLException{
			
			String sql="select * from student";
			Connection conn = JdbcUtil.getConn();
			
			//创建DbUtils组件核心类
			QueryRunner qr=new QueryRunner();
			
			//执行查询,
			List<Student> list = qr.query(conn, sql, new BeanListHandler<Student>(Student.class));
			
			DbUtils.close(conn);
			
			System.out.println(list);
		}
		
	
BeanListHandler:将结果集的每一行数据封装为对象,然后放在list集合中,并返回。

控制台打印:
		[Student [id=12, name=xx, chinese=12],
		 Student [id=12, name=xx, chinese=12], 
		 Student [id=12, name=xx, chinese=12], 
		 Student [id=12, name=小白, chinese=2],
		 Student [id=0, name=jack1, chinese=12], 
		 Student [id=0, name=jack2, chinese=11]]

3.2.4 结果集处理器 - ArrayHandler(查询返回结果记录的第一行,封装对对象数组, 即返回:Object[])
		//4.执行查询 ,使用系统自带的结果集处理器 -- ArrayHandler
		@Test
		public void demo4() throws SQLException{
			
			String sql="select * from student where id =?";
			Connection conn = JdbcUtil.getConn();
			
			//创建DbUtils组件核心类
			QueryRunner qr=new QueryRunner();
			
			//执行查询,
			Object[] arrs = qr.query(conn, sql, new ArrayHandler(),12);
			
			DbUtils.close(conn);
			
			System.out.println(Arrays.toString(arrs)); //[12, xx, qw, we, we, we, sd]

		}

ArrayHandler:取结果集中的第一条数据,封装为数组对象。

控制台打印:
		[12, xx, 12.0, 23.0, null, null, null]

3.2.5 结果集处理器 - ArrayListHandler(把查询的每一行都封装为数组对象,再添加到list集合中)
		//5.执行查询 ,使用系统自带的结果集处理器 -- ArrayListHandler
		@Test
		public void demo5() throws SQLException{
			
			String sql="select * from student ";
			Connection conn = JdbcUtil.getConn();
			
			//创建DbUtils组件核心类
			QueryRunner qr=new QueryRunner();
			
			//执行查询,
			List<Object[]> query = qr.query(conn, sql, new ArrayListHandler());
			
			DbUtils.close(conn);
			
			System.out.println(query); 

		}		
3.2.6 结果集处理器 - ScalarHandler(查询返回结果记录的第一行的第一列)
		//6.执行查询 ,使用系统自带的结果集处理器 -- ScalarHandler
		@Test
		public void demo6() throws SQLException{
			
			String sql="select count(*) from student ";
			Connection conn = JdbcUtil.getConn();
			
			//创建DbUtils组件核心类
			QueryRunner qr=new QueryRunner();
			
			//执行查询,
			Long num = qr.query(conn, sql, new ScalarHandler<Long>());
			
			DbUtils.close(conn);
			
			System.out.println(num); 

		}		
3.2.7 结果集处理器 - MapHandler(查询返回结果的第一条记录封装为map)
		//7.执行查询 ,使用系统自带的结果集处理器 -- MapHandler
		@Test
		public void demo7() throws SQLException{
			
			String sql="select * from student where id=? ";
			Connection conn = JdbcUtil.getConn();
			
			//创建DbUtils组件核心类
			QueryRunner qr=new QueryRunner();
			
			//执行查询,
			Map<String, Object> map = qr.query(conn, sql, new MapHandler(),12);
			
			DbUtils.close(conn);
			
			System.out.println(map); 
			//{id=12, name=xx, chinese=null, english=null, math=null, b=null, b2=null}


		}		
		
}

发布了94 篇原创文章 · 获赞 0 · 访问量 620

猜你喜欢

转载自blog.csdn.net/weixin_45602227/article/details/104351159