日期:2014-05-16  浏览次数:20424 次

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

/** 
使用三种Callback接口作为参数的query方法的返回值不同:  
以ResultSetExtra[color=red][/color]ctor作为方法参数的query方法返回Object型结果,要使用查询结果,我们需要对其进行强制转型;  
以RowMapper接口作为方法参数的query方法直接返回List型的结果;  
以RowCallbackHandler作为方法参数的query方法,返回值为void; 
RowCallbackHandler和RowMapper才是我们最常用的选择  
* @author Administrator 
*  
*/ 
public class SpringTest {  
/** 
  * 返回结果是List里装Map,使用参数,使用回调 RowMapperResultSetExtractor用于处理单行记录, 
  * 它内部持有一个RowMapper实例的引用,当处理结果集的时候, 会将单行数据的处理委派给其所持有的RowMapper实例,而其余工作它负责 
  */ 
public void getListRowMapperResultSetExtractor() {  
  ApplicationContext context = new FileSystemXmlApplicationContext(  
    "src/database_config.xml");  
  // E:\demoworkspace\spring 为工程主目录  
  JdbcTemplate jt = new JdbcTemplate((DataSource) context  
    .getBean("oracleDataSourceTest")); // 测试用的方法  
  Object[] arg = new Object[] { 10 };  
  List list = (ArrayList) jt.query("select * from region where rownum<?",  
    arg, new RowMapperResultSetExtractor(new RowMapper() {  
     public Object mapRow(ResultSet rs, int index)  
       throws SQLException {  
      Map u = new HashMap(); //可以是自己的JavaBean值对象(简单Java对象POJO)  
      u.put("region_id", rs.getString("region_id"));  
      u.put("region_name", rs.getString("region_name"));  
      return u;  
     }  
    }));  
  Iterator it = list.iterator();  
  while (it.hasNext()) {  
   Map map = (Map) it.next();  
   System.out.println(map.toString());  
  }  
}  
 
 
/**返回结果是List里装Map,不使用参数,使用回调 
  使用RowMapper比直接使用ResultSetExtractor要方便的多,只负责处理单行结果就行,现在,我们只需要将单行的结果组装后返回就行, 
  剩下的工作,全部都是JdbcTemplate内部的事情了。 实际上,JdbcTemplae内部会使用一个ResultSetExtractor实现类来做其余的工作, 
  毕竟,该做的工作还得有人做不是?!   
  */ 
public void getListRowMapper() {  
  ApplicationContext context = new FileSystemXmlApplicationContext(  
    "src/database_config.xml");  
  JdbcTemplate jt = new JdbcTemplate((DataSource) context  
    .getBean("oracleDataSourceTest"));  
  List list = jt.query(  
    "select * from region where rownum<10", new RowMapper() {  
     public Object mapRow(ResultSet rs, int index)  
       throws SQLException {  
      Map u = new HashMap();  
      u.put("region_id", rs.getString("region_id"));  
      u.put("region_name", rs.getString("region_name"));  
      return u;  
     }  
    });  
  Iterator it = list.iterator();  
  while (it.hasNext()) {  
   Map map = (Map) it.next();  
   System.out.println(map.toString());  
  }  
}&n