原文链接
1 /**
2 使用三种Callback接口作为参数的query方法的返回值不同:
3 以ResultSetExtractor作为方法参数的query方法返回Object型结果,要使用查询结果,我们需要对其进行强制转型;
4 以RowMapper接口作为方法参数的query方法直接返回List型的结果;
5 以RowCallbackHandler作为方法参数的query方法,返回值为void;
6 RowCallbackHandler和RowMapper才是我们最常用的选择
7 * @author Administrator
8 *
9 */
10 public class SpringTest
11 {
12 /**
13 * 返回结果是List里装Map,使用参数,使用回调 RowMapperResultSetExtractor用于处理单行记录,
14 * 它内部持有一个RowMapper实例的引用,当处理结果集的时候, 会将单行数据的处理委派给其所持有的RowMapper实例,而其余工作它负责
15 */
16 public void getListRowMapperResultSetExtractor()
17 {
18 ApplicationContext context = new FileSystemXmlApplicationContext(
19 "src/database_config.xml");
20 // E:/demoworkspace/spring 为工程主目录
21 JdbcTemplate jt = new JdbcTemplate((DataSource) context
22 .getBean("oracleDataSourceTest")); // 测试用的方法
23 Object[] arg = new Object[] { 10 };
24 List list = (ArrayList) jt.query("select * from region where rownum<?",
25 arg, new RowMapperResultSetExtractor(new RowMapper()
26 {
27 @Override
28 public Object mapRow(ResultSet rs, int index)
29 throws SQLException
30 {
31 Map u = new HashMap(); //可以是自己的JavaBean值对象(简单Java对象POJO)
32 u.put("region_id", rs.getString("region_id"));
33 u.put("region_name", rs.getString("region_name"));
34 return u;
35 }
36 }));
37 Iterator it = list.iterator();
38 while (it.hasNext())
39 {
40 Map map = (Map) it.next();
41 System.out.println(map.toString());
42 }
43 }
44
45
46 /**返回结果是List里装Map,不使用参数,使用回调
47 使用RowMapper比直接使用ResultSetExtractor要方便的多,只负责处理单行结果就行,现在,我们只需要将单行的结果组装后返回就行,
48 剩下的工作,全部都是JdbcTemplate内部的事情了。 实际上,JdbcTemplae内部会使用一个ResultSetExtractor实现类来做其余的工作,
49 毕竟,该做的工作还得有人做不是?!
50 */
51 public void getListRowMapper()
52 {
53 ApplicationContext context = new FileSystemXmlApplicationContext(
54 "src/database_config.xml");
55 JdbcTemplate jt = new JdbcTemplate((DataSource) context
56 .getBean("oracleDataSourceTest"));
57 List list = jt.query(
58 "select * from region where rownum<10", new RowMapper()
59 {
60 @Override
61 public Object mapRow(ResultSet rs, int index)
62 throws SQLException
63 {
64 Map u = new HashMap();
65 u.put("region_id", rs.getString("region_id"));
66 u.put("region_name", rs.getString("region_name"));
67 return u;
68 }
69 });
70 Iterator it = list.iterator();
71 while (it.hasNext())
72 {
73 Map map = (Map) it.next();
74 System.out.println(map.toString());
75 }
76 }
77
78 // 返回记录集
79 /**
80 RowCallbackHandler虽然与RowMapper同是处理单行数据,不过,除了要处理单行结果,它还得负责最终结果的组装和获取工作,
81 在这里我们是使用当前上下文声明的List取得最终查询结果, 不过,我们也可以单独声明一个RowCallbackHandler实现类,
82 在其中声明相应的集合类,这样,我们可以通过该RowCallbackHandler实现类取得最终查询结果
83 */
84 public void getListRowCallbackHandler()
85 {
86 ApplicationContext context = new FileSystemXmlApplicationContext(
87 "src/database_config.xml");
88
89 JdbcTemplate jt = new JdbcTemplate((DataSource) context
90 .getBean("oracleDataSourceTest"));
91 String sql = "select * from region where region_id>?";
92 final List<Map> list = new ArrayList<Map>(); //一定要用final定义
93 Object[] params = new Object[] { 0 };
94 jt.query(sql, params, new RowCallbackHandler()
95 {
96 @Override
97 public void processRow(ResultSet rs) throws SQLException
98 {
99 Map u = new HashMap();
100 u.put("region_id", rs.getString("region_id"));
101 u.put("region_name", rs.getString("region_name"));
102 list.add(u);
103 }
104 });
105
106 Iterator it = list.iterator();
107 while (it.hasNext())
108 {
109 Map map = (Map) it.next();
110 System.out.println(map.toString());
111 }
112 }