`
littie1987
  • 浏览: 131303 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Spring中的query方法

 
阅读更多

    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方法使用示例

    spring JdbcTemplate query方法使用示例,欢迎下载借鉴

    spring boot query查询

    springboot 的query查询,采用temprate 和jpa两种模式,并用@query标签,spring boot 查询学习之用

    Spring框架JdbcTemplate类中查询方法介绍

    Spring 框架 JdbcTemplate 类中查询方法介绍 JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法...

    基于Spring-jdbc-update、query方法操作数据库

    基于Spring-jdbc-update、query方法操作数据库

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

    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. ...

    SpringData视频教学

    5. 尚硅谷_SpringData_Query注解 6. 尚硅谷_SpringData_Modifying注解 7. 尚硅谷_SpringData_CrudRepository接口 8. 尚硅谷_SpringData_PagingAndSortingRespository接口 9. 尚硅谷_SpringData_JpaRepository接口 10...

    Spring中文帮助文档

    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查询方法

    Spring中常用的hql查询方法_(getHibernateTemplate())

    springmvc+queryrunner自动生成

    该工程是对jdbc的封装控制层使用springmvc持久层使用queryrunner

    尚硅谷Spring-data视频

    SpringData_Query注解 · 6. SpringData_Modifying注解 · 7. SpringData_CrudRepository接口 · 8. SpringData_PagingAndSortingRespository接口 · 9. SpringData_JpaRepository接口 · 10. SpringData_...

    spring.net中文手册在线版

    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-Boot-JPA-Hibernate-Query-Methods:Spring Boot JPAHibernate查询方法

    在Spring Data中,我们可以定义存储库接口和方法来检索数据。 所有基本查询均已实现(例如:findById,findAll,保存,删除等) 巨大的好处是,您可以通过单个访问点内置所有CRUD操作,此外,您还可以为复杂的...

    Spring中PropertyPlaceholderConfigurer的使用

    Spring 中 PropertyPlaceholderConfigurer 的使用 PropertyPlaceholderConfigurer 是 Spring 框架中的一个重要组件,用于加载和管理 Properties 文件。它能够将 Properties 文件中的键值对注入到 Spring 的 bean 中...

    Spring 2.0 开发参考手册

    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-query-utils:库提供工具来检测N + 1查询并计算使用Spring和Hibernate生成的查询

    Spring Hibernate查询实用程序Spring应用程序中不再有N + 1个查询Spring Hibernate Query Utils:一种在Spring / Hibernate应用程序中检测N + 1查询并计算查询次数的简便方法·目录用夹具测试检测配置使能够错误等级...

    Spring Data JPA 原理与实战2021年

    │ 04 如何利用 Repoitory 中的方法返回值解决实际问题?.mp4 │ 05 @Query 解决了什么问题?什么时候应该选择它?.mp4 │ 06 @Entity 里面的 JPA 注解有哪些?在 Java 多态场景下如何使用?.mp4 │ 07 @Entity ...

    spring chm文档

    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. ...

    Spring API

    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...

    springjdbc

    <property name="targetMethod" value="query" /> <bean id="querytestControllerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <bean id="sfb2" class="org....

    Spring2.5实现事务管理(本地事务、分布式事务).doc

    在这个例子中,我们定义了一个抽象的 DAO,提供了基本的 CRUD 操作,包括 save、update、delete 和 query 等方法。 Spring 2.5 提供了强大的事务管理机制,可以满足复杂的业务需求。通过使用 Spring 的事务管理器和...

Global site tag (gtag.js) - Google Analytics