前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DBUtils框架的使用(下)

DBUtils框架的使用(下)

作者头像
wangweijun
发布2020-01-19 20:27:50
8200
发布2020-01-19 20:27:50
举报
文章被收录于专栏:wangweijun

刚才讲了使用QueryRunner插入、修改、更新数据,现在来学习一下使用QueryRunner进行数据库表查询。 通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很显然,我们应该使用DBUtils工具包提供的实现类来实现封装。 在DBUtils框架中,共提供了九个ResultSetHandler的实现类。

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的key。
  • ScalarHandler:将结果集中的列的信息转换到一个对象中

分别通过案例感受一下。 新建测试类ResultSetHandlerTest 然后添加成员变量

代码语言:javascript
复制
private ComboPooledDataSource dataSource = new ComboPooledDataSource();

添加ArrayHandler的测试代码

代码语言:javascript
复制
	@Test
	public void testArrayHandler() throws SQLException{
		//ArrayHandler	将结果集的第一行数据存入Object数组
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";

		//数组的每一个元素对应第一行数据的每一列
		Object[] objects = queryRunner.query(sql, new ArrayHandler());
		System.out.println(Arrays.toString(objects));
	}

运行代码

添加ArrayListHandler测试代码

代码语言:javascript
复制
	@Test
	public void testArrayListHandler() throws SQLException{
		//ArrayListHandler	将结果集的每一行数据存入Object数组,然后存入List
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());
		
		for(Object[] objects : list){
			System.out.println(Arrays.toString(objects));
		}
	}

运行代码

添加BeanHandler测试代码

代码语言:javascript
复制
	@Test
	public void testBeanHandler() throws SQLException{
		//BeanHandler	将结果集的第一行数据封装到JavaBean对象中
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		
		//传入Account.class参数是为了在方法中通过反射构造Account对象实例
		Account account = queryRunner.query(sql, new BeanHandler<Account>(Account.class));
		System.out.println(account.getId());
		System.out.println(account.getName());
		System.out.println(account.getMoney());
	}

运行代码

注意事项:使用BeanHandler,表列名必须与Bean类的属性名称一致。

添加BeanListHandler测试代码

代码语言:javascript
复制
	@Test
	public void testBeanListHandler() throws SQLException{
		//BeanListHandler	将结果集每一条数据都封装到JavaBean对象,再存入List
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		List<Account> list = queryRunner.query(sql, new BeanListHandler<Account>(Account.class));
		
		for(Account account : list){
			System.out.print(account.getId() + "\t");
			System.out.print(account.getName() + "\t");
			System.out.print(account.getMoney());
			System.out.println();
		}
	}

运行代码

添加ColumnListHandler测试代码

代码语言:javascript
复制
	@Test
	public void testColumnListHandler() throws SQLException{
		//ColumnListHandler		获得结果集的某一列
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		
		//泛型为什么写Object	因为每列的类型都不一样
		List<Object> list = queryRunner.query(sql, new ColumnListHandler("name"));
		System.out.println(list);
	}

运行代码

添加MapHandler测试代码

代码语言:javascript
复制
	@Test
	public void testMapHandler() throws SQLException{
		//MapHandler	将结果集中的第一行数据封装到Map集合,key是列名,value是数据值
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		Map<String, Object> map = queryRunner.query(sql, new MapHandler());
		System.out.println(map);
	}

运行代码

添加MapListHandler测试代码

代码语言:javascript
复制
	@Test
	public void testMapListHandler() throws SQLException {
		// MapHandler 将结果集中的每一行数据封装到Map集合,key是列名,value是数据值,再将Map对象存入List
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());
		
		for(Map<String,Object> map : list){
			System.out.println(map);
		}
	}

运行代码

添加KeyedHandler测试代码

代码语言:javascript
复制
	@Test
	public void testKeyedHandler() throws SQLException {
		// KeyedHandler	将结果集中的每一行数据都封装到Map里,再将Map存入一个Map里,key可以指定为任意列
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select * from account";
		Map<Object, Map<String,Object>> map = queryRunner.query(sql, new KeyedHandler("name"));
		
		System.out.println(map);
	}

运行代码

添加ScalarHandler测试代码

代码语言:javascript
复制
	@Test
	public void testScalarHandler() throws SQLException{
		//ScalarHandler		通常保存只有一行一列的结果数据
		QueryRunner queryRunner = new QueryRunner(dataSource);
		String sql = "select count(*) from account";
		long count = (Long) queryRunner.query(sql, new ScalarHandler(1));
		System.out.println(count);
	} 

运行代码

到这里,九个Hanlder就介绍完毕了。 最常用的几个: BeanHandler、BeanListHandler、ColumnListHandler、ScalarHandler。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档