1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package
cn.mickeymouse.dbutils;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
org.apache.commons.dbutils.QueryRunner;
import
org.apache.commons.dbutils.ResultSetHandler;
import
org.junit.Test;
import
cn.mickeymouse.domain.User;
import
cn.mickeymouse.utils.DataSourceUtils;
//关于ResultSetHandler的作用及使用方式
public
class
DbUtilsDemo2 {
// ResultSetHandler只能在QueryRunner的query方法上使用。
@Test
public
void
fun1()
throws
SQLException {
String sql =
"select * from user where id=1"
;
// 将查询的结果封装到User对象中。
QueryRunner runner =
new
QueryRunner(DataSourceUtils.getDataSource());
// 执行sql语句将将结果集封装到指定对象中。
User user = runner.query(sql,
new
ResultSetHandler<User>() {
public
User handle(ResultSet rs)
throws
SQLException {
User user =
null
;
if
(rs.next()) {
user =
new
User();
user.setId(rs.getInt(
"id"
));
user.setName(rs.getString(
"name"
));
user.setAge(rs.getInt(
"age"
));
}
return
user;
}
});
System.out.println(user);
// 上面操作执行的步骤:
// 1.先执行sql语句,得到一个ResultSet
// 2.将ResultSet传递到ResultSetHandler的handle方法内
// 3.handle方法的返回值就是runner.query()方法的返回值。
// 问题:ResultSetHandler中的handle方法它的作用是什么?
// 它的作用就是用于实现将ResultSet封装成指定的对象。
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
public
class
RSHanlderDemo {
//ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询
@Test
public
void
tes9() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
Long count = (Long)runner.query(
"select count(*) from account"
,
new
ScalarHandler());
System.out.println(count);
}
//KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
@Test
public
void
tes8() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
Map<
Object
, Map<
String
,
Object
>> map = runner.query(
"select * from account where money>?"
,
new
KeyedHandler(
"id"
),
500
);
System.out.println(map);
}
//ColumnListHandler:将结果集中某一列的数据存放到List中。
@Test
public
void
tes7() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
List<
Object
>list = runner.query(
"select * from account where money>?"
,
new
ColumnListHandler(
3
),
500
);
System.out.println(list);
}
//MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
@Test
public
void
tes6() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
List<Map<
String
,
Object
>> list = runner.query(
"select * from account where money>?"
,
new
MapListHandler(),
500
);
System.out.println(list);
}
//MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
@Test
public
void
tes5() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
Map<
String
,
Object
> map = runner.query(
"select * from account where money>?"
,
new
MapHandler(),
500
);
System.out.println(map);
}
//BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
@Test
public
void
tes4() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
List<Account>list = runner.query(
"select * from account where money>?"
,
new
BeanListHandler<Account>(Account.
class
),
500
);
System.out.println(list);
}
//BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
@Test
public
void
tes3() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
Account acc = runner.query(
"select * from account where money>?"
,
new
BeanHandler<Account>(Account.
class
),
500
);
System.out.println(acc);
}
//ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
@Test
public
void
tes2() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
List<
Object
[]> list = runner.query(
"select * from account where money>?"
,
new
ArrayListHandler(),
500
);
System.out.println(list);
}
//ArrayHandler:把结果集中的第一行数据转成对象数组。
@Test
public
void
test1() throws SQLException{
QueryRunner runner =
new
QueryRunner(
new
ComboPooledDataSource());
Object
[] objs = runner.query(
"select * from account where money>?"
,
new
ArrayHandler(),
500
);
System.out.println(objs);
}
}
|
实现类
ArrayHandler,将结果集中第一条记录封装到一个Object[]数组中。
ArrayListHandler, 将结果集中每一条记录封装到Object[]数组中,在将数组封装到List<Object[]>集合中。
BeanHandler, 将结果集中第一条记录封装到指定的javaBean中。
BeanListHandler,将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。
ColumnListHandler,将结果集中某一个指定的列封装到List<Object>中。
KeyedHandler, 将结果集中每一条记录封装到Map<String,Object>,将它做为value,key是指定的一个字段的值,在封装到一个Map<Object,Map<String,Object>>集合中。
MapHandler, 将结果集中第一条记录封装到Map<String,Object> key就是字段名称,value就是字段值。
MapListHandler, 将结果集中每一条记录封装到Map<String,Object> key就是字段名称,value就是字段值。在将这些Map集合封装到List集合中。
ScalarHandler它用于单值封装,例如 select count(*) from user操作