/**
使用三种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());
}
}
分享到:
相关推荐
在这个例子中,如果`updateUser`或`deletePostsByUserId`中的任何一处抛出异常,整个事务将被回滚,确保数据的一致性。 Spring JdbcTemplate的优点包括: 1. **简洁的API**:提供了一组简单易用的方法来执行常见的...
在这个例子中,我们注入了JdbcTemplate实例,并使用query方法执行SQL查询。传入的RowCallbackHandler将在遍历结果集时被调用,处理每一行数据。 **5. 总结** Spring JdbcTemplate简化了数据库操作,通过模板模式...
在本示例中,我们探讨的是一个基于Spring MVC和JdbcTemplate的非注解式应用程序,该程序可能用于处理数据访问层的操作。Spring MVC是Spring框架的一部分,它专注于Web应用程序的模型-视图-控制器(MVC)架构。而...
在这个例子中,`id = ?`是预编译的占位符,`params`数组包含了实际参数,`MyRowMapper`是一个自定义的映射器,用于将查询结果转换为Java对象。 接下来,让我们看看如何使用`jdbcTemplate`进行预编译的插入操作。`...
在 Spring 中使用 `JdbcTemplate` 需要以下几个步骤: 1. **配置数据源**:Spring 通过数据源(DataSource)与数据库建立连接。在这个例子中,我们将使用 c3p0 数据源。c3p0 是一个开源的 JDBC 连接池,它可以提供...
在SQL语句中使用占位符(如`?`)可以防止SQL注入。JdbcTemplate提供`update`和`query`方法,接受`PreparedStatementSetter`或`SqlParameterSource`作为参数,用于设置占位符的值。 ```java public void ...
接下来,我们将在Spring MVC控制器类中使用JdbcTemplate。Spring MVC通过`@Autowired`注解自动注入JdbcTemplate实例。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org....
在这个例子中,我们注入了JdbcTemplate实例,并调用`update()`方法执行SQL,其中问号(?)是占位符,实际值由方法的参数提供。 2. 读取(Read) 读取数据通常涉及到查询数据库。JdbcTemplate提供了`query()`和`...
为了能够在项目中使用`JDBCTemplate`,首先需要在Spring的配置文件`ApplicationContext`中定义一个`jdbcTemplate` bean,例如: ```xml <bean id="jdbcTemplate" class="org.springframework.jdbc.core....
Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具,它是Spring JDBC模块的核心组件,提供了对SQL查询的封装,使得数据库访问更为简单和安全。JdbcTemplate的API设计清晰,主要分为几个部分,其中包括...
在这个例子中,如果任何地方抛出异常,整个事务都会被回滚,确保数据的一致性。 总结起来,Spring JdbcTemplate简化了数据库操作,而声明式事务管理则使事务处理更加便捷。通过这两个工具,开发者可以更专注于业务...
在这个例子中,提供的文件`log4j.xml`表明了日志配置可能使用的是Log4j。在Log4j配置文件中,你可以设置合适的级别(如`DEBUG`)以便捕获数据库操作的日志信息。 ```xml <logger name="org.springframework.jdbc....
本篇文章将深入探讨Spring Boot中使用`@Query`注解进行自定义查询的方法,包括Spring Data JPA和Template两种模式。 首先,让我们了解Spring Data JPA。这是一个强大的ORM(对象关系映射)框架,它简化了与数据库的...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
在这个例子中,`YourResultEntity`是你定义的结果集映射实体类,用于将存储过程返回的结果转换为Java对象。 结合Spring和Hibernate,你可以在Spring的Service层使用Hibernate的Session来调用存储过程,或者在...
在上述代码中,我们定义了一个UserRepository类,其中的`addUser`方法使用JdbcTemplate的`update`方法执行SQL插入语句。`@Autowired`注解使得Spring能够自动将配置的JdbcTemplate注入到Repository中。 同样,我们也...
在这个例子中,我们定义了一个UserService,它依赖于JdbcTemplate。通过注入DataSource,JdbcTemplate自动初始化。然后我们可以使用JdbcTemplate的update()方法插入数据,query()方法查询数据,同时使用自定义的...
在上面的例子中,我们使用了`ItemMapper`来实现`RowMapper`接口,具体代码示例如下: ```java private static final class ItemMapper implements RowMapper<Item> { @Override public Item mapRow(ResultSet rs,...
在 Spring Boot 中使用 JdbcTemplate 访问数据库,是一种常见且简便的方式,特别适合那些需要对数据库进行基础操作的应用。 JdbcTemplate 是 Spring Framework 提供的一个模板类,它对 JDBC API 进行了封装,使得...
在上面的例子中,我们创建了一个`MapSqlParameterSource`对象,用于存储命名参数及其值。然后,我们使用`NamedParameterJdbcTemplate`的`query`方法执行查询,其中SQL语句中的`:userId`和`:username`对应于参数源中...