`

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

阅读更多
/** *//**  
使用三种Callback接口作为参数的query方法的返回值不同:   
以ResultSetExtractor作为方法参数的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());   
  }   
 }   
  
 // 返回记录集   
 /** *//**  
  RowCallbackHandler虽然与RowMapper同是处理单行数据,不过,除了要处理单行结果,它还得负责最终结果的组装和获取工作,  
  在这里我们是使用当前上下文声明的List取得最终查询结果, 不过,我们也可以单独声明一个RowCallbackHandler实现类,  
  在其中声明相应的集合类,这样,我们可以通过该RowCallbackHandler实现类取得最终查询结果   
  */  
 public void getListRowCallbackHandler() {   
  ApplicationContext context = new FileSystemXmlApplicationContext(   
    "src/database_config.xml");   
  
  JdbcTemplate jt = new JdbcTemplate((DataSource) context   
    .getBean("oracleDataSourceTest"));   
  String sql = "select * from region  where region_id>?";   
  final List<Map> list=new ArrayList<Map>(); //一定要用final定义   
  Object[] params = new Object[] { 0 };   
  jt.query(sql, params, new RowCallbackHandler() {   
   public void processRow(ResultSet rs) throws SQLException {   
    Map u = new HashMap();     
    u.put("region_id", rs.getString("region_id"));   
    u.put("region_name", rs.getString("region_name"));   
    list.add(u);   
   }   
  });   
     
  Iterator it = list.iterator();   
  while (it.hasNext()) {   
   Map map = (Map) it.next();   
   System.out.println(map.toString());   
  }   
 }

 

分享到:
评论

相关推荐

    Spring 学习 JdbcTemplate,模板模式,回调

    回调机制是程序设计中的一种技术,它允许一个函数在执行过程中调用用户提供的函数或方法。在Spring JdbcTemplate中,回调机制体现在RowCallbackHandler和ResultSetExtractor接口上。开发者可以实现这些接口,定义回...

    spring自带的jdbcTemplate查询、插入预编译使用

    本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 首先,`jdbcTemplate`的核心功能是通过预编译的SQL语句(PreparedStatement)来执行数据库操作。预编译SQL可以有效...

    Spring JdbcTemplate api

    对于不带参数的SQL执行,`JdbcTemplate`提供了`execute`方法,但该方法不支持直接传递SQL参数,参数绑定需要通过回调接口实现。而对于带参数的SQL执行,`JdbcTemplate`提供了`update`方法,不仅支持参数绑定,还可以...

    jdbcTemplate

    6. **回调接口**:通过`PreparedStatementCreator`和`ResultSetExtractor`等回调接口,用户可以在不修改`JdbcTemplate`核心逻辑的情况下定制SQL执行和结果处理。 7. **执行效率**:由于`JdbcTemplate`会缓存预编译...

    【转】Spring中模板模式和回调模式的讲解

    在以上代码中,`query()`是模板方法,`UserRowMapper`是回调接口,用于映射查询结果;`getForEntity()`同样是个模板方法,`MyResponseCallback`则是处理HTTP响应的回调。 总结,Spring通过模板模式和回调模式,不仅...

    JdbcTemplate.jar

    6. **回调接口**:提供RowCallbackHandler和ResultSetExtractor等回调接口,允许自定义数据处理逻辑。 三、使用JdbcTemplate的基本步骤 1. **引入依赖**:添加Spring JDBC相关的jar包,如本压缩包中的...

    JdbcTemplate查询

    1. **ORM化回调操作**:`JdbcTemplate`提供了多种方法将查询结果转换为对象列表,这对于复杂的业务逻辑非常有用。 ```java List&lt;User&gt; users = jdbcTemplate.query("SELECT * FROM user", new UserRowMapper());...

    Spirng-JdbcTemplate资料.docx

    JdbcTemplate通过一系列的模板方法和回调机制,使得数据库操作变得简洁且易于测试。 在传统的JDBC操作中,执行一个简单的更新操作可能需要编写大量的样板代码,包括建立连接、创建Statement或PreparedStatement、...

    jdbcTemplate的使用方法.pdf

    5. **回调处理结果集** 当需要自定义处理查询结果时,可以使用`RowCallbackHandler`。下面的代码展示了一个简单的例子: ```java final String id = "1"; jdbcTemplate.query("SELECT * FROM USER WHERE user_...

    JDBCTemplate相关jar包4.3.7

    这些方法都支持回调接口,可以自定义参数绑定和结果处理逻辑。 4. **事务管理**:JDBCTemplate自动管理事务,可以通过配置@Transactional注解或编程式控制来开启和提交事务。在发生异常时,它会自动回滚事务,确保...

    SSH笔记-Spring JdbcTemplate

    4. **事务管理**:Spring的JdbcTemplate也整合了事务管理功能,通过`JdbcTemplate.execute()`方法的回调函数,可以在一个操作中包裹多个数据库操作,确保原子性和一致性。如果发生异常,事务会自动回滚,否则在所有...

    jdbcTemplate的jar包.rar

    8. **回调接口**:提供CallableStatementCreator和PreparedStatementSetter接口,用于创建CallableStatement和PreparedStatement,并设置参数。 在实际应用中,开发者需要导入的这五个jar包可能包括Spring框架的...

    JdbcTemplate

    `JdbcTemplate`是模板方法设计模式的一个实例,将数据库操作的通用流程封装在模板类中,而具体的数据库操作(如SQL语句的执行)则由子类或者回调接口来实现。这种设计降低了代码的耦合度,使得扩展和维护变得更加...

    Spring jdbctemplate + mysql 分页封装

    JdbcTemplate是Spring提供的一个模板类,用于执行SQL语句,它通过回调模式简化了数据访问层的编写。在使用JdbcTemplate时,我们需要配置数据库连接信息,创建JdbcTemplate实例,然后调用其提供的方法执行SQL。 在...

    Spring-JdbcTemplate

    - **JdbcTemplate**:作为 Spring 对 JDBC 的包装,它提供了一系列的模板方法和回调接口,用于执行 SQL 语句,并对异常进行了统一处理。 ### 2. JdbcTemplate 的主要功能 - **查询**:支持简单的 SQL 查询,预编译...

    java基于jdbctemplate数据持久层操作封装

    - `execute(CallbackAction action)`: 执行回调操作,如创建表、删除表等DDL操作。 4. **JdbcTemplate与MySql结合**: - 在MySQL环境中,JdbcTemplate可以轻松执行各种SQL操作,如CRUD(创建、读取、更新、删除)...

    jdbcTemplate2022

    在Java世界中,JDBC(Java Database Connectivity)是Java程序与数据库交互的标准接口,而`JdbcTemplate`则是Spring框架提供的一种简化JDBC操作的工具类。`JdbcTemplate2022`可能指的是某个特定版本或者关于`...

Global site tag (gtag.js) - Google Analytics