Spring的JdbcTemplate把Jdbc进行了封装,下面我们来看一下它的query(String sql,RowMapper rowMapper);的具体实现。
首先,query方法会调用下面一段代码:
public List query(String sql, RowMapper rowMapper) throws DataAccessException {
return (List) query(sql, new RowMapperResultSetExtractor(rowMapper));
}
我们发现,Spring把调用的请求交给了一个更为抽象的query方法,而且更重要的是new RowMapperResultSetExtractor(rowMapper),将rowMapper交给了一个专门处理结果集的类。
那下面让我们看看这个更为抽象的query方法到底干了什么
public Object query(final String sql, final ResultSetExtractor rse) throws DataAccessException {
Assert.notNull(sql, "SQL must not be null");
Assert.notNull(rse, "ResultSetExtractor must not be null");
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL query [" + sql + "]");
}
class QueryStatementCallback implements StatementCallback, SqlProvider {
public Object doInStatement(Statement stmt) throws SQLException {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
ResultSet rsToUse = rs;
if (nativeJdbcExtractor != null) {
rsToUse = nativeJdbcExtractor.getNativeResultSet(rs);
}
return rse.extractData(rsToUse);
}
finally {
JdbcUtils.closeResultSet(rs);
}
}
public String getSql() {
return sql;
}
}
return execute(new QueryStatementCallback());
}
它主要的工作是通过一个内部类实现的,内部类首先执行用户传入的sql语句,得到结果集然后调用
ResultSetExtractor 类的extractData()方法得到处理之后的结果集,其实就是一个List集合。
分享到:
相关推荐
spring JdbcTemplate query方法使用示例,欢迎下载借鉴
springboot 的query查询,采用temprate 和jpa两种模式,并用@query标签,spring boot 查询学习之用
Spring 框架 JdbcTemplate 类中查询方法介绍 JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法...
基于Spring-jdbc-update、query方法操作数据库
12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...
5. 尚硅谷_SpringData_Query注解 6. 尚硅谷_SpringData_Modifying注解 7. 尚硅谷_SpringData_CrudRepository接口 8. 尚硅谷_SpringData_PagingAndSortingRespository接口 9. 尚硅谷_SpringData_JpaRepository接口 10...
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...
Spring中常用的hql查询方法_(getHibernateTemplate())
该工程是对jdbc的封装控制层使用springmvc持久层使用queryrunner
SpringData_Query注解 · 6. SpringData_Modifying注解 · 7. SpringData_CrudRepository接口 · 8. SpringData_PagingAndSortingRespository接口 · 9. SpringData_JpaRepository接口 · 10. SpringData_...
12.4.Spring.NET中的Advisor 12.5.使用ProxyFactoryObject创建AOP代理 12.5.1.基本原理 12.5.2.ProxyFactoryObject的属性 12.5.3.代理接口 12.5.4.代理一个类 12.6.使用ProxyFactory类以编程方式创建AOP代理 12.7....
在Spring Data中,我们可以定义存储库接口和方法来检索数据。 所有基本查询均已实现(例如:findById,findAll,保存,删除等) 巨大的好处是,您可以通过单个访问点内置所有CRUD操作,此外,您还可以为复杂的...
Spring 中 PropertyPlaceholderConfigurer 的使用 PropertyPlaceholderConfigurer 是 Spring 框架中的一个重要组件,用于加载和管理 Properties 文件。它能够将 Properties 文件中的键值对注入到 Spring 的 bean 中...
6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...
Spring Hibernate查询实用程序Spring应用程序中不再有N + 1个查询Spring Hibernate Query Utils:一种在Spring / Hibernate应用程序中检测N + 1查询并计算查询次数的简便方法·目录用夹具测试检测配置使能够错误等级...
│ 04 如何利用 Repoitory 中的方法返回值解决实际问题?.mp4 │ 05 @Query 解决了什么问题?什么时候应该选择它?.mp4 │ 06 @Entity 里面的 JPA 注解有哪些?在 Java 多态场景下如何使用?.mp4 │ 07 @Entity ...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...
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...
<property name="targetMethod" value="query" /> <bean id="querytestControllerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <bean id="sfb2" class="org....
在这个例子中,我们定义了一个抽象的 DAO,提供了基本的 CRUD 操作,包括 save、update、delete 和 query 等方法。 Spring 2.5 提供了强大的事务管理机制,可以满足复杂的业务需求。通过使用 Spring 的事务管理器和...