/** *//**
使用三种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中,回调机制体现在RowCallbackHandler和ResultSetExtractor接口上。开发者可以实现这些接口,定义回...
本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 首先,`jdbcTemplate`的核心功能是通过预编译的SQL语句(PreparedStatement)来执行数据库操作。预编译SQL可以有效...
对于不带参数的SQL执行,`JdbcTemplate`提供了`execute`方法,但该方法不支持直接传递SQL参数,参数绑定需要通过回调接口实现。而对于带参数的SQL执行,`JdbcTemplate`提供了`update`方法,不仅支持参数绑定,还可以...
6. **回调接口**:通过`PreparedStatementCreator`和`ResultSetExtractor`等回调接口,用户可以在不修改`JdbcTemplate`核心逻辑的情况下定制SQL执行和结果处理。 7. **执行效率**:由于`JdbcTemplate`会缓存预编译...
在以上代码中,`query()`是模板方法,`UserRowMapper`是回调接口,用于映射查询结果;`getForEntity()`同样是个模板方法,`MyResponseCallback`则是处理HTTP响应的回调。 总结,Spring通过模板模式和回调模式,不仅...
6. **回调接口**:提供RowCallbackHandler和ResultSetExtractor等回调接口,允许自定义数据处理逻辑。 三、使用JdbcTemplate的基本步骤 1. **引入依赖**:添加Spring JDBC相关的jar包,如本压缩包中的...
1. **ORM化回调操作**:`JdbcTemplate`提供了多种方法将查询结果转换为对象列表,这对于复杂的业务逻辑非常有用。 ```java List<User> users = jdbcTemplate.query("SELECT * FROM user", new UserRowMapper());...
JdbcTemplate通过一系列的模板方法和回调机制,使得数据库操作变得简洁且易于测试。 在传统的JDBC操作中,执行一个简单的更新操作可能需要编写大量的样板代码,包括建立连接、创建Statement或PreparedStatement、...
5. **回调处理结果集** 当需要自定义处理查询结果时,可以使用`RowCallbackHandler`。下面的代码展示了一个简单的例子: ```java final String id = "1"; jdbcTemplate.query("SELECT * FROM USER WHERE user_...
这些方法都支持回调接口,可以自定义参数绑定和结果处理逻辑。 4. **事务管理**:JDBCTemplate自动管理事务,可以通过配置@Transactional注解或编程式控制来开启和提交事务。在发生异常时,它会自动回滚事务,确保...
4. **事务管理**:Spring的JdbcTemplate也整合了事务管理功能,通过`JdbcTemplate.execute()`方法的回调函数,可以在一个操作中包裹多个数据库操作,确保原子性和一致性。如果发生异常,事务会自动回滚,否则在所有...
8. **回调接口**:提供CallableStatementCreator和PreparedStatementSetter接口,用于创建CallableStatement和PreparedStatement,并设置参数。 在实际应用中,开发者需要导入的这五个jar包可能包括Spring框架的...
`JdbcTemplate`是模板方法设计模式的一个实例,将数据库操作的通用流程封装在模板类中,而具体的数据库操作(如SQL语句的执行)则由子类或者回调接口来实现。这种设计降低了代码的耦合度,使得扩展和维护变得更加...
JdbcTemplate是Spring提供的一个模板类,用于执行SQL语句,它通过回调模式简化了数据访问层的编写。在使用JdbcTemplate时,我们需要配置数据库连接信息,创建JdbcTemplate实例,然后调用其提供的方法执行SQL。 在...
- **JdbcTemplate**:作为 Spring 对 JDBC 的包装,它提供了一系列的模板方法和回调接口,用于执行 SQL 语句,并对异常进行了统一处理。 ### 2. JdbcTemplate 的主要功能 - **查询**:支持简单的 SQL 查询,预编译...
- `execute(CallbackAction action)`: 执行回调操作,如创建表、删除表等DDL操作。 4. **JdbcTemplate与MySql结合**: - 在MySQL环境中,JdbcTemplate可以轻松执行各种SQL操作,如CRUD(创建、读取、更新、删除)...
在Java世界中,JDBC(Java Database Connectivity)是Java程序与数据库交互的标准接口,而`JdbcTemplate`则是Spring框架提供的一种简化JDBC操作的工具类。`JdbcTemplate2022`可能指的是某个特定版本或者关于`...