以前在做spring security时,就注意到一个细节,那就是当我只使用spring核心功能与hibernate时,居然也要依赖于spring-jdbc包,至少会报以下错误:
org/springframework/jdbc/support/SQLExceptionTranslator
当时并不在意这个,少就加上嘛,现在想来,的确有些奇怪,session、transaction之类的应该是hibernate自带的,怎么还要依赖于spring jdbc包,今天花了点时间看了下spring jdbc,但是奇怪的是,并没有spring jdbc中发现有处理事物的类与方法,那spring jdbc是怎么处理事务的呢?首先要做的就是在网上找资料,有前辈已经分析了,然后自己看了一下源码,的确是那样的,那就是hibernate与spring jdbc进行事务控制的是同一个类。在HibernateTransactionManager中的确有这么个注释:
* <p>This transaction manager is appropriate for applications that use a single
* Hibernate SessionFactory for transactional data access, but it also supports
* direct DataSource access within a transaction (i.e. plain JDBC code working
* with the same DataSource). This allows for mixing services which access Hibernate
* and services which use plain JDBC (without being aware of Hibernate)!
* Application code needs to stick to the same simple Connection lookup pattern as
* with {@link org.springframework.jdbc.datasource.DataSourceTransactionManager}
* (i.e. {@link org.springframework.jdbc.datasource.DataSourceUtils#getConnection}
* or going through a
* {@link org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy}).
在此类的doBegin方法中,有一段代码说得比较具体:
...
// Register the Hibernate Session's JDBC Connection for the DataSource, if set.
if (getDataSource() != null) {
Connection con = session.connection();
ConnectionHolder conHolder = new ConnectionHolder(con);
if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) {
conHolder.setTimeoutInSeconds(timeout);
}
if (logger.isDebugEnabled()) {
logger.debug("Exposing Hibernate transaction as JDBC transaction [" + con + "]");
}
TransactionSynchronizationManager.bindResource(getDataSource(), conHolder);
txObject.setConnectionHolder(conHolder);
}
...
从上面的第一个if语句中可以看出,只要jdbcTemplate与hibernateTemplate使用的是同一个dataSource,那么就可以达到控制事物的目的,这也说明了为什么hibernateDaoSupport为什么要依赖spring jdbc,因为它的底层事物控制也要依赖于spring jdbc的事物控制,而不是hibernate的底层事物控制。
分享到:
相关推荐
标题中的“Spring JDBC事务管理”是指在Spring框架中如何利用JDBC进行数据库操作时的事务控制。Spring提供了多种方式来管理事务,使得开发者能够在复杂的业务逻辑中更好地控制数据的持久化过程,确保数据的一致性和...
Spring JDBC事务管理 Spring框架提供了两种事务管理方式:编程式的事务管理(Programmatic transaction management)和声明式的事务管理(Declarative transaction management)。在本文中,我们将以JDBC事务管理...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...
综上,Spring JDBC事务管理是Spring框架中重要的部分,通过理解并掌握其原理和使用方法,可以帮助开发者构建稳定、可靠的数据库应用程序。在实践中,要根据项目的具体需求选择合适的事务管理策略,并注意处理事务...
本话题主要关注Spring的两个重要模块:事务管理和Spring JDBC。这些知识点对于任何使用Spring进行后端开发的程序员来说都是至关重要的。 首先,我们来深入理解Spring事务管理。事务是数据库操作的基本单元,它确保...
3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二、 实验内容 1、在MySQL中创建以下三张表,其中account为账户表,book为书籍信息...
四、Spring JDBC事务管理 1. 编程式事务管理:通过PlatformTransactionManager接口的begin(), commit()和rollback()方法手动控制事务。 2. 声明式事务管理:利用@Transactional注解在方法级别声明事务,Spring会自动...
基于Spring JDBC的事务管理 本资源主要介绍基于Spring JDBC的事务管理,包括事务的定义、使用 @Transactional 注解、Spring JDBC的事务管理机制、事务的ACID特性、事务的传播、事务的隔离等内容。 事务的定义 ...
在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个"spring_JDBC基本包"可能包含的文件有Spring框架的基础库,如spring-jdbc.jar,数据库驱动如mysql-connector-java....
1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用;...3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。
例如,通过Spring JDBC,你可以利用JdbcTemplate执行SQL查询、更新、插入和删除操作,同时利用Spring的事务管理能力来确保数据的一致性。此外,通过依赖注入,你可以将DataSource配置在外部,使得数据库配置的改变...
Spring JDBC不仅包含了JDBC的基本功能,如数据源配置、事务管理,还引入了模板模式,即JdbcTemplate,进一步降低了数据库操作的复杂性。 JdbcTemplate是Spring JDBC的核心类,它是对JDBC的简单而强大的封装。它提供...
本篇文章将深入探讨Spring JDBC如何通过注解来实现事务管理。 1. **Spring JDBC简介** Spring JDBC提供了一个JdbcTemplate类,它封装了常见的JDBC操作,如执行SQL查询、更新、调用存储过程等,减少了代码量和出错...
通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...
4. **JdbcTransactionManager**:Spring JDBC提供了事务管理功能,JdbcTransactionManager是基于JDBC的事务管理器,它负责控制数据库事务的开始、提交、回滚等操作。 5. **DataSourceUtils** 和 **ConnectionUtils*...
在Spring JDBC中,事务管理是至关重要的,因为它确保了数据库操作的一致性和完整性。`PlatformTransactionManager`是Spring中处理事务的核心接口,而`DataSourceTransactionManager`是实现该接口的具体类,用于基于...
综上所述,`springjdbc.zip`文件中的示例可能展示了如何在Spring环境中配置和使用JDBC,包括数据源配置、事务管理、以及使用`JdbcTemplate`执行增删改查操作的完整流程。通过学习这些示例,开发者可以更好地理解和...
3. **Transaction Management**:Spring JDBC支持声明式事务管理,这意味着我们可以在XML配置文件中定义事务边界,而不是在代码中显式地控制事务的开始、提交和回滚。 4. **PreparedStatement**:Spring JDBC鼓励...
6. **spring-tx-5.1.3.RELEASE.jar**:处理事务管理,包括编程式和声明式事务管理,与Spring JDBC紧密配合,确保数据一致性。 7. **mysql-connector-java-8.0.11.jar**:这是MySQL数据库的驱动包,用于建立Java应用...