ResultSetHandler接口简介
ResultSetHandler
能够对查问进去的ResultSet
后果集进行解决,达到一些业务上的需要
ResultSetHandler后果集解决类
本例展现的是应用ResultSetHandler
接口的几个常见实现类实现数据库的查问操作,能够大大减少代码量,优化程序
每一种实现类都代表了对查问后果集的一种解决形式
ResultSetHandler实现类 | 阐明 |
---|---|
ArrayHandler |
将后果集中的第一条记录封装到一个Object[] 数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
ArrayListHandler |
将后果集中的每一条记录记录都封装 到一个Object[] 数组中, 将这些数组再封装到List 汇合中 |
BeanHandler |
将后果集中第一条记录封装到指定的JavaBean 中 |
BeanListHandler |
将后果集中每一条记录封装到指定的JavaBean 中,再将这些JavaBean 封装到List 汇合中 |
MapHandler |
将后果集中第一条记录封装到了Map<String,Object> 汇合中,key 就是字段名称,value 就是字段值 |
ScalarHandler |
用于封装单个数据.例如select count(*) from table_name |
查问内容
前面应用的数据是
要练习的查找内容如下
- 查问id为5的记录,封装到数组中
- 查问所有数据,封装到List汇合中
- 查问id为5的记录,封装到指定JavaBean中
- 查问薪资大于 3000 的所员工信息,封装到JavaBean中再封装到List汇合中
- 查问姓名是 张百万的员工信息,将后果封装到Map汇合中
- 查问所有员工的薪资总额
代码示例
/**
* 我的项目形容: 应用QueryRunner类query办法执行查问操作
* 作 者: chain.xx.wdm
* 备 注:
* ResultSetHandler接口能够对查问进去的ResultSet后果集进行解决,达到一些业务上的需要
*/
public class QueryRunnerSelectTest {
/**
* 查问id为5的记录,封装到数组中
*
* ArrayHandler 将后果集中的第一条记录封装在一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
*/
@Test
public void queryFindByIdTest() throws SQLException {
// 1。主动模式创立QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 2。编写占位符模式的sql语句
String sql = "select * from employee where id = ?";
// 3。执行语句,获取后果集
Object[] query = queryRunner.query(sql,new ArrayHandler(),5);
// 4。处理结果集,打印后果
System.out.println(Arrays.toString(query));
}
/**
* 查问所有数据,封装到List汇合中
*
* ArrayListHandler 将后果集中的每一条记录都封装在一个Object[]数组中,将这些数组再封装到List汇合中
*/
@Test
public void queryFindAll() throws SQLException {
// 1。有参形式结构QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 2。编写sql语句(这里不须要占位符)
String sql = "select * from employee";
// 3。执行query()语句获取后果集
List<Object[]> query = queryRunner.query(sql, new ArrayListHandler());
// 4。遍历List汇合,获取后果
for(Object[] lst:query){
System.out.println(Arrays.toString(lst));
}
}
/**
* 查问id为5的记录,封装到指定JavaBean中
*
* BeanHandler 将后果集中第一条记录封装到一个指定的javaBean中
*/
@Test
public void queryToJavaBean() throws SQLException {
// 1.应用有参形式结构QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 2.编写占位符模式的sql语句
String sql = "select * from employee where eid = ?";
// 3.执行sql语句查问,将后果封装在Employee中
Employee query = queryRunner.query(sql, new BeanHandler<Employee>(Employee.class), 5);
// 4.获取后果
System.out.println(query);
}
/**
* 查问薪资大于 3000 的所员工信息,封装到JavaBean中再封装到List汇合中
*
* BeanListHandler 将后果集中每一条记录封装到指定的javaBean中,再将这些javaBean再封装到List汇合中
*/
@Test
public void queryFindSalaryToBean() throws SQLException {
// 主动模式结构QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 编写占位符模式的sql语句
String sql = "select * from employee where salary > ?";
// 创立Object类型的数组,数组中元素是替换占位符的数值
//Object[] param = {3000,5000};
// 执行sql语句,将后果封装到指定javaBean中,再封装到List汇合中
List<Employee> query = queryRunner.query(sql, new BeanListHandler<Employee>(Employee.class), 300);
// 遍历List汇合,打印后果
for(Employee e:query){
System.out.println(e);
}
}
/**
* 查问姓名是 张百万的员工信息,将后果封装到Map汇合中
*
* MapHandler 将后果集中第一条记录封装到了Map<String,Object>汇合中,key就是字段名称,value就是字段值
*/
@Test
public void queryToMap() throws SQLException {
// 1.有参形式结构QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 2.编写有占位符模式的sql语句
String sql = "select * from employee where name = ?";
// 3.执行sql语句,将后果封装到Map中
Map<String, Object> map = queryRunner.query(sql, new MapHandler(), "张百万");
// 4.打印后果
Set<Map.Entry<String, Object>> entries = map.entrySet();
for(Map.Entry<String, Object> m:entries){
System.out.println(m.getKey() + " = " + m.getValue());
}
}
/**
* 查问所有员工的薪资总额
*
* ScalarHandler 用于封装单个数据,例如select count(*) from employee
*/
@Test
public void queryToScalar() throws SQLException {
// 应用有参形式结构QueryRunner对象
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
// 编写sql语句
String sql = "select sum(salary) from employee";
// 执行sql语句
Double result = queryRunner.query(sql, new ScalarHandler<Double>());
// 获取后果
System.out.println(result);
}
}
发表回复