`

java 回调 spring jdbc 查询模板

    博客分类:
  • JAVA
阅读更多
spring jdbc 查询模板  内部类的使用

感觉这种写法让代码显得很清晰,将固定的操作步骤制定成模板方法,通过使用者,自己来实现继承类来决定操作过程。


org.springframework.jdbc.core.RowMapper
public interface RowMapper<T> {
    T mapRow(ResultSet rs, int rowNum) throws SQLException; 

}


org.springframework.jdbc.core.RowMapperResultSetExtractor
public class RowMapperResultSetExtractor<T> implements ResultSetExtractor<List<T>> {

public List<T> extractData(ResultSet rs) throws SQLException {
		List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
		int rowNum = 0;
		while (rs.next()) {
			results.add(this.rowMapper.mapRow(rs, rowNum++));
		}
		return results;
	}

}


以下是模板类的操作过程:
org.springframework.jdbc.core.JdbcTemplate
public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException {
		return query(sql, new RowMapperResultSetExtractor<T>(rowMapper));
	}


public <T> T query(final String sql, final ResultSetExtractor<T> 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<T>, SqlProvider {
			public T 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());
	}



//模板方法
public <T> T execute(StatementCallback<T> action) throws DataAccessException {
		Assert.notNull(action, "Callback object must not be null");

		Connection con = DataSourceUtils.getConnection(getDataSource());
		Statement stmt = null;
		try {
			Connection conToUse = con;
			if (this.nativeJdbcExtractor != null &&
					this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
				conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
			}
			stmt = conToUse.createStatement();
			applyStatementSettings(stmt);
			Statement stmtToUse = stmt;
			if (this.nativeJdbcExtractor != null) {
				stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
			}
			T result = action.doInStatement(stmtToUse);
			handleWarnings(stmt);
			return result;
		}
		catch (SQLException ex) {
			// Release Connection early, to avoid potential connection pool deadlock
			// in the case when the exception translator hasn't been initialized yet.
			JdbcUtils.closeStatement(stmt);
			stmt = null;
			DataSourceUtils.releaseConnection(con, getDataSource());
			con = null;
			throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);
		}
		finally {
			JdbcUtils.closeStatement(stmt);
			DataSourceUtils.releaseConnection(con, getDataSource());
		}
	}


分享到:
评论

相关推荐

    spring-jdbc jar包.rar

    - **代码简洁性**:通过模板类和回调接口,Spring JDBC减少了大量重复的样板代码,使得数据库操作代码更加简洁明了。 - **事务管理**:集成Spring的事务管理,可以方便地实现事务的传播行为和回滚策略,提升代码的可...

    SpringMVC3 + SpringJDBC整合 源码。

    SpringJDBC是Spring框架的一部分,它简化了传统的JDBC编程模型,通过提供模板方法和回调机制,使得数据库操作更加容易。SpringJDBC提供了一层抽象,可以避免大量重复的JDBC代码,如打开和关闭连接、处理结果集等,使...

    Spring连接JDBCjar包

    Spring JDBC支持两种方式执行SQL:模板方法和回调处理器。模板方法直接在`JdbcTemplate`上调用,如`execute(String sql)`;回调处理器则通过提供回调接口(如`PreparedStatementCreator`和`ResultSetExtractor`)让...

    Spring源代码解析(三):Spring_JDBC.doc

    总的来说,Spring JDBC的JdbcTemplate是Spring框架中用于数据库操作的关键组件,通过回调接口和模板方法设计,它极大地简化了数据库访问的代码,同时也提供了良好的异常处理和资源管理机制。理解和掌握JdbcTemplate...

    Spring 学习 JdbcTemplate,模板模式,回调

    本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database ...

    springjdbc使用及mybatis-generator

    Spring JDBC通过一套模板类(如JdbcTemplate)和回调接口(如RowMapper、ResultSetExtractor),将数据库操作与业务逻辑解耦,使得代码更加简洁且易于测试。在本项目中,SpringJDBCTemplate的使用将展示如何在Spring...

    scala jdbc 库,需要 spring-jdbc

    例如,你可以使用Scala的函数式编程特性,配合Spring JDBC的回调方法,编写出简洁而强大的数据库操作逻辑。 在压缩包`dwScalaSpringJDBC-master`中,很可能是包含了一个示例项目,演示如何在Scala项目中集成和使用...

    springmvc+springjdbc+maven 后端架构

    它简化了JDBC的配置和使用,通过模板方法和回调机制减少了代码量。Spring JDBC还支持事务管理,使开发者能够轻松处理数据库事务的提交和回滚。 **Maven** Maven 是一个项目管理和综合工具,它帮助开发者管理依赖...

    struts2+spring2.5+jdbc+ext+json实例用到的lib包

    Spring 的 JDBC 支持简化了数据库操作,通过模板方法和回调机制减少了代码量,同时提供了事务管理和数据源管理等高级功能。 JDBC(Java Database Connectivity)是 Java 与数据库交互的标准接口。尽管 Spring 提供...

    使用Spring的事务模板

    3. 使用`TransactionTemplate`执行事务:在事务操作中,你可以使用`execute`方法,它接受一个回调函数,所有在这个回调函数中的操作都在事务范围内执行。如果回调函数抛出异常,事务会自动回滚;否则,事务在回调...

    Spring源代码解析3:SpringJDBC[归纳].pdf

    除了`JdbcTemplate`,Spring还提供了如`HibernateTemplate`这样的其他模板类,适用于不同的ORM框架,它们同样采用了回调接口的方式,为特定框架的操作提供统一的处理方式。 总的来说,`JdbcTemplate`通过模板方法...

    JAVA 开发的spring技术所要用的包

    - **JDBC抽象**:简化了数据库操作,通过模板类和回调接口减少代码量。 - **ORM支持**:集成了Hibernate、MyBatis等ORM框架,方便与数据库交互。 - **JPA支持**:提供对Java Persistence API的支持,便于进行对象...

    org.apache.servicemix.bundles.spring-jdbc-3.2.8.RELEASE_2.zip

    2. **Spring JDBC**:理解 Spring 框架中的 JDBC 模块如何通过提供模板类和回调接口,简化了传统的 JDBC 编程,降低了处理数据库异常和资源管理的复杂性。 3. **MySQL 二进制日志**:学习 MySQL 二进制日志的工作...

    jdbcTemplate

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

    使用JDBC进行数据访问【springframwork】定义.pdf

    JdbcTemplate是Spring JDBC的核心组件,它提供了一种模板方法设计模式,将常见的JDBC操作进行了封装,如打开和关闭连接、处理异常、管理事务等,让开发者只需关注SQL语句和结果集的处理。JdbcTemplate支持JDBC 2.0...

    mysql-jdbc-Spring源代码分析

    `JdbcTemplate`是Spring框架提供的一个用于简化JDBC编程的工具类,它封装了许多常用的数据库操作,如查询、更新等,并且通过模板模式设计,提供了灵活的扩展机制。这使得开发者能够更专注于业务逻辑而非繁琐的JDBC...

    java面试Spring.pdf

    Spring提供多种回调方法,如`@PostConstruct`、`@PreDestroy`,以及生命周期接口(InitializingBean、DisposableBean)供开发者定制Bean的初始化和销毁行为。 **Spring Bean的作用域**: Spring Bean有五种作用域...

    Spring框架学习笔记文档

    开发者可以使用模板方法或回调机制执行SQL,方便地进行数据操作。 5. **Spring 声明式事务管理**:Spring提供了声明式事务管理,允许开发者在不写任何事务管理代码的情况下,通过配置实现事务的ACID特性。通过@...

    spring-framework-5.3.23 源码

    Spring JDBC模块简化了数据库操作,提供了模板和回调机制,而ORM模块则让开发者可以使用对象模型来处理数据库操作,无需关心底层SQL。 在Web开发领域,Spring MVC是Spring Framework的一部分,提供了一个强大的MVC...

    基础Spring教程

    3. **Bean的生命周期**:讨论了Spring如何初始化、配置、管理和销毁Bean,包括Bean的实例化、属性设置、初始化回调、销毁回调等阶段。 4. **AOP(Aspect Oriented Programming,面向切面编程)**:Spring的AOP模块...

Global site tag (gtag.js) - Google Analytics