通过BeanHandler和BeanListHandler得到的结果集

DBUtils工具包
DBUtils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。

QueryRunner类简单化了SQL查询,它与ResultSetHandler接口组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。ResultSetHandler接口提供将数据按要求转换为另一种形式。

一、常用实现类
1、BeanHandler
将结果集中的第一行数据封装到一个对应的JavaBean实例中

例如:

@Test
public void testBeanHandler() {
	QueryRunner queryRunner = new QueryRunner();
	Connection conn = null;
	try {
		conn = JdbcUtils.getConnectionForC3P0();
		String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";
		User user = queryRunner.query(conn, sql, new BeanHandler<>(User.class), "小王");
		System.out.println(user);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (conn != null) {
			JdbcUtils.release(null, conn, null);
		}
	}
}

2、BeanListHandler
将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里

例如:

@Test
public void testBeanListHandler() {
	QueryRunner queryRunner = new QueryRunner();
	Connection conn = null;
	try {
		conn = JdbcUtils.getConnectionForC3P0();
		String sql = "select username,password,register_time,sex,user_role,id_card from user";
		List user = queryRunner.query(conn, sql, new BeanListHandler<>(User.class));
		System.out.println(user);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (conn != null) {
			JdbcUtils.release(null, conn, null);
		}
	}
}

3、MapHandler
将结果集中的第一行数据封装为一个Map

例如:

@Test
public void testMapHandler() {
	QueryRunner queryRunner = new QueryRunner();
	Connection conn = null;
	try {
		conn = JdbcUtils.getConnectionForC3P0();
		String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";
		Map user = queryRunner.query(conn, sql, new MapHandler(), "小王");
		System.out.println(user);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (conn != null) {
			JdbcUtils.release(null, conn, null);
		}
	}
}

4、MapListHandler
将结果集中的每一行数据都封装到一个Map里,然后再存放到List
https://www.ximalaya.com/yinyue/25375793/
https://www.ximalaya.com/yinyue/25375783/
https://www.ximalaya.com/yinyue/25375779/
https://www.ximalaya.com/yinyue/25375770/
https://www.ximalaya.com/yinyue/25375764/
https://www.ximalaya.com/yinyue/25375758/
https://www.ximalaya.com/yinyue/25375752/
https://www.ximalaya.com/yinyue/25390775/
https://www.ximalaya.com/yinyue/25390676/
https://www.ximalaya.com/yinyue/25390685/
https://www.ximalaya.com/yinyue/25390689/
https://www.ximalaya.com/yinyue/25390696/
https://www.ximalaya.com/yinyue/25390698/
https://www.ximalaya.com/yinyue/25390704/
https://www.ximalaya.com/yinyue/25390713/
https://www.ximalaya.com/yinyue/25390715/
https://www.ximalaya.com/yinyue/25390720/
https://www.ximalaya.com/yinyue/25390435/
https://www.ximalaya.com/yinyue/25390724/
https://www.ximalaya.com/yinyue/25393616/
https://www.ximalaya.com/yinyue/25393622/
https://www.ximalaya.com/yinyue/25393628/
https://www.ximalaya.com/yinyue/25393185/
https://www.ximalaya.com/yinyue/25393198/
例如:

@Test
public void testMapListHandler() {
	QueryRunner queryRunner = new QueryRunner();
	Connection conn = null;
	try {
		conn = JdbcUtils.getConnectionForC3P0();
		String sql = "select username,password,register_time,sex,user_role,id_card from user";
		List> user = queryRunner.query(conn, sql, new MapListHandler());
		System.out.println(user);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (conn != null) {
			JdbcUtils.release(null, conn, null);
		}
	}
}

5、ScalarHandler
将结果集中的单个值返回

例如:

@Test
public void testScalarHandler2() {
	QueryRunner queryRunner = new QueryRunner();
	Connection conn = null;
	try {
		conn = JdbcUtils.getConnectionForC3P0();
		String sql = "select register_time from user where id_card=?";
		Object register_time = queryRunner.query(conn, sql, new ScalarHandler(), "321...");
		System.out.println(register_time);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (conn != null) {
			JdbcUtils.release(null, conn, null);
		}
	}
}

6、需注意的坑
通过BeanHandler和BeanListHandler得到的结果集会有不存在(NULL)的情况,比如这种情况下就会导致NULL,图:

出现这种情况的原因是:实体类(User)中的对应属性名与数据库的字段(列名)无法匹配,数据库的数据如下图:



其中register_time、user_role、id_card与类变量registerTime、userRole、idCard无法对应赋值,这也是BeanHandler的一种缺陷,而其它如MapHandler、ScalarHandler就不会出现这种情况。

原因是:MapHandler、ScalarHandler的底层运用了反射来获取元数据的列名,所以它可以获取的到结果。

作者:威威喵
来源:CSDN
原文:https://blog.csdn.net/smile_Running/article/details/87009755
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(通过BeanHandler和BeanListHandler得到的结果集)