spring 对 JdbcTemplate……的事务管理不用担心。就是对直接Jdbc实现的Dao事务管理有点小问题,如:我直接,用dataSource.getConnection()。spring是管理不了事务的。原因是Jdbc实现的Dao里的connection是自动提交的。要改用经过spring 处理过的connection = DataSourceUtil.getConnection(dataSource);才行。
我这有个例子——用户注册,有备份。只是例子而且。
下面是原始的Dao实现,
备份方法:
public User backUp(User user) throws SQLException {
Connection conn = dataSource.getConnection();
try {
PreparedStatement pstmt = conn.prepareStatement("insert into user(name) values (?)");
pstmt.setString(1, user.getName()+" 备份");
pstmt.executeUpdate();
pstmt = conn.prepareStatement("select last_insert_id()");
ResultSet rs = pstmt.executeQuery();
if(rs != null && rs.next()) {
user.setUId(rs.getInt(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
throw e;
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("数据库连接关闭失败!");
}
}
}
return user;
}
现在要改成:
public User backUp(User user) throws SQLException {
Connection conn = DataSourceUtils.getConnection(dataSource);
try {
PreparedStatement pstmt = conn.prepareStatement("insert into user(name) values (?)");
pstmt.setString(1, user.getName()+" 备份");
pstmt.executeUpdate();
pstmt = conn.prepareStatement("select last_insert_id()");
ResultSet rs = pstmt.executeQuery();
if(rs != null && rs.next()) {
user.setUId(rs.getInt(1));
}
} catch (SQLException e) {
throw e;
} finally {
DataSourceUtils.releaseConnection(conn, dataSource);
}
return user;
}
然后你在逻辑层就可以用spring的任何方式管理事务了。
如:注册
public User register(User user) throws SQLException {
userDao.backUp(user);
userDao.insert(user);
return user;
}
分享到:
相关推荐
在Java中,通常使用JDBC的Connection对象来管理事务,但在Spring框架中,我们可以使用声明式事务处理来简化这一过程。 声明式事务处理的核心是基于AOP(面向切面编程)的,Spring通过在事务边界添加通知(advice)...
### Spring框架的事务管理及应用 #### Spring框架概述 Spring框架是一个开源项目,最早出现在2003年2月,其起源可以追溯到Rod Johnson在2002年末出版的书籍《Expert One-on-One J2EE Design and Development》中的...
对比 Java 中的事务管理,通常指的是 JDBC 的事务管理,需要手动调用 Connection 对象的 commit() 和 rollback() 方法。这种方式完全由开发者控制,灵活性高但容易出错,且事务管理代码会与业务代码混合在一起。 ...
Spring提供了对J2EE API的一致抽象,简化了J2EE技术的使用,无论使用哪种API,开发者都能以相同的方式编写代码。这减少了代码量,降低了出错的可能性,遵循了“更少代码,更少BUG”的原则。 **Spring事务管理** ...
声明式事务管理是建立在 AOP 之上的,它的本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务管理的最大优点是它可以将事务...
### 深入理解Spring的事务管理机制 #### 一、事务的基本原理 Spring框架的事务管理机制是在Java开发环境中非常重要的一个组成部分,它能够帮助开发者简化事务处理的复杂度,提高应用程序的一致性和可靠性。Spring...
Spring对JDBC事务管理的封装体现在PlatformTransactionManager接口的实现中。该接口提供了getTransaction、commit和rollback三个方法,分别负责事务的开启、提交和回滚。通过依赖于PlatformTransactionManager接口...
Spring 声明式事务处理与多数据源支持 在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。Spring 框架提供了声明式事务处理机制,使得业务代码中进行事务控制操作起来非常简单。只需...
Spring事务处理是其核心特性之一,确保了数据的一致性和完整性。本篇文章将聚焦于Spring事务处理中ThreadLocal的使用,以及如何通过源码理解和应用这个工具。 首先,了解Spring事务管理的基本概念。在多线程环境中...
- **性能考量**:过度使用事务可能会对性能产生负面影响,因此需要合理设计事务范围。 #### 七、总结 事务管理是企业级应用开发中的关键技术之一,Spring 和 Spring Boot 提供了强大且灵活的事务管理机制。通过理解...
然而,这些方式存在一些不足,如不同数据库访问技术处理事务的方式不同,需要对各种数据库事务处理有深入理解,并且事务管理分散在代码中,不易维护。 三、Spring事务管理 Spring提供了一种统一的事务管理模型,它...
根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...
当使用JDBC时,Spring会通过Connection的setAutoCommit(false)方法开启手动事务,并在适当时候调用commit或rollback。 标签“工具”可能暗示了这个例子可能结合了某种数据库工具,例如Hibernatet。在实际应用中,...
Spring框架提供了更高级别的事务管理功能,包括编程式事务管理和声明式事务管理,可以简化事务处理,并提供事务传播行为等高级特性。 综上所述,Java事务管理的核心是`Connection`对象的正确使用和管理。通过共享同...
在Spring框架中,事务管理是核心功能之一,它使得开发者能够方便地控制数据库操作的原子性、一致性、隔离性和持久性,确保数据的完整性和可靠性。本文将深入解析Spring中的事务管理机制。 首先,我们需要理解事务的...
Spring提供了对多种数据源的支持,包括JDBC DataSources和Transaction Managers。通过Spring的配置,我们可以轻松地管理多个数据源,并根据业务逻辑进行动态切换。这通常涉及到使用`@Qualifier`注解来指定特定的...
本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...
使用JDBC进行事务管理时,通常涉及DataSource、Connection的获取和释放,以及事务的开启、提交和回滚。这种手动管理方式可能导致代码冗长且易出错。 Spring的事务管理解决了这些问题。它基于AOP(面向切面编程)...
- 在JDBC中,可以通过设置`connection.setAutoCommit(false)`关闭自动提交,然后通过`connection.commit()`和`connection.rollback()`手动控制事务的提交和回滚。 3. Spring 事务管理: - Spring 提供了`...