→阿童沐

財富==支撐一個人生存多長時間的能力!

导航

Spring 2.5中JdbcTemplate类query方法的三种回调接口-

原文链接

  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     }

 



posted on 2011-12-13 14:23  阿童沐  阅读(504)  评论(0)    收藏  举报