`
BradyZhu
  • 浏览: 257048 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring 2.5中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接口上。开发者可以实现这些接口,定义回调函数来处理每个查询结果行或者整个结果集。这样,JdbcTemplate在执行SQL查询后,会调用...

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

    总结来说,Spring的`jdbcTemplate`是一个强大的工具,它简化了数据库操作,提供了预编译SQL的功能以避免SQL注入,同时通过回调机制允许我们在执行过程中进行定制化处理。无论是查询、插入还是调用存储过程,`...

    Spring JdbcTemplate api

    在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,它采用了模板模式来分离数据库访问中的不变和可变部分,提供了一种更加健壮且易于使用的数据访问机制。`JdbcTemplate`负责处理资源的获取、关闭以及...

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

    在Spring框架中,模板模式和回调模式是两种重要的设计模式,它们被广泛应用于处理各种不同的任务,如数据访问、远程调用等。这两种模式都旨在提高代码的可扩展性和复用性,使得开发者能够以更加灵活的方式处理业务...

    Spring-JdbcTemplate

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

    SSH笔记-Spring JdbcTemplate

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

    Spring jdbctemplate + mysql 分页封装

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

    jdbcTemplate

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

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    JDBCTemplate相关jar包4.3.7

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

    JdbcTemplate.jar

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

    Spirng-JdbcTemplate资料.docx

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

    jdbcTemplate的jar包.rar

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

    JdbcTemplate查询

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

    jdbcTemplate的使用方法.pdf

    《JdbcTemplate:Spring框架中的数据库操作利器》 在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具。它提供了一种安全、易于使用的接口,将常见的JDBC代码模板化,从而减轻开发人员处理低级数据库操作...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    JdbcTemplate

    6. **回调接口**:`JdbcTemplate`提供了一些回调接口,如`RowCallbackHandler`和`ResultSetExtractor`,允许用户自定义数据处理逻辑。 在实际应用中,使用`JdbcTemplate`通常涉及以下步骤: 1. **创建JdbcTemplate...

    Spring事务管理和SpringJDBC思维导图

    Spring JDBC还引入了RowMapper接口,这是一个回调接口,用于将数据库结果集中的每一行映射为一个Java对象。此外,NamedParameterJdbcTemplate类提供了命名参数的支持,使得SQL语句更易读,参数更易管理。同时,...

Global site tag (gtag.js) - Google Analytics