`
chenlb
  • 浏览: 696569 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring 对 conection 的事务

阅读更多

    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;
    }


分享到:
评论

相关推荐

    Spring声明式事务处理

    在Java中,通常使用JDBC的Connection对象来管理事务,但在Spring框架中,我们可以使用声明式事务处理来简化这一过程。 声明式事务处理的核心是基于AOP(面向切面编程)的,Spring通过在事务边界添加通知(advice)...

    Spring 框架的事务管理及应用

    ### Spring框架的事务管理及应用 #### Spring框架概述 Spring框架是一个开源项目,最早出现在2003年2月,其起源可以追溯到Rod Johnson在2002年末出版的书籍《Expert One-on-One J2EE Design and Development》中的...

    Spring事务与Java事务比较

    对比 Java 中的事务管理,通常指的是 JDBC 的事务管理,需要手动调用 Connection 对象的 commit() 和 rollback() 方法。这种方式完全由开发者控制,灵活性高但容易出错,且事务管理代码会与业务代码混合在一起。 ...

    Spring框架的事务管理应用分析.doc

    Spring提供了对J2EE API的一致抽象,简化了J2EE技术的使用,无论使用哪种API,开发者都能以相同的方式编写代码。这减少了代码量,降低了出错的可能性,遵循了“更少代码,更少BUG”的原则。 **Spring事务管理** ...

    spring声明事务,编程事务实现

    声明式事务管理是建立在 AOP 之上的,它的本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务管理的最大优点是它可以将事务...

    深入理解spring的事务管理机制

    ### 深入理解Spring的事务管理机制 #### 一、事务的基本原理 Spring框架的事务管理机制是在Java开发环境中非常重要的一个组成部分,它能够帮助开发者简化事务处理的复杂度,提高应用程序的一致性和可靠性。Spring...

    实例详解Spring JDBC事务管理.doc

    Spring对JDBC事务管理的封装体现在PlatformTransactionManager接口的实现中。该接口提供了getTransaction、commit和rollback三个方法,分别负责事务的开启、提交和回滚。通过依赖于PlatformTransactionManager接口...

    Spring Data JPA系列4——Spring声明式事务处理与多数据源支持.doc

    Spring 声明式事务处理与多数据源支持 在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。Spring 框架提供了声明式事务处理机制,使得业务代码中进行事务控制操作起来非常简单。只需...

    Spring事务处理-ThreadLocal的使用

    Spring事务处理是其核心特性之一,确保了数据的一致性和完整性。本篇文章将聚焦于Spring事务处理中ThreadLocal的使用,以及如何通过源码理解和应用这个工具。 首先,了解Spring事务管理的基本概念。在多线程环境中...

    SpringBoot事务和Spring事务详讲

    - **性能考量**:过度使用事务可能会对性能产生负面影响,因此需要合理设计事务范围。 #### 七、总结 事务管理是企业级应用开发中的关键技术之一,Spring 和 Spring Boot 提供了强大且灵活的事务管理机制。通过理解...

    Spring事务优缺点及使用详解.docx

    然而,这些方式存在一些不足,如不同数据库访问技术处理事务的方式不同,需要对各种数据库事务处理有深入理解,并且事务管理分散在代码中,不易维护。 三、Spring事务管理 Spring提供了一种统一的事务管理模型,它...

    Spring+ibatis 保留ibatis事务的配置

    根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...

    spring学习笔记(十五)-编程式事务例子

    当使用JDBC时,Spring会通过Connection的setAutoCommit(false)方法开启手动事务,并在适当时候调用commit或rollback。 标签“工具”可能暗示了这个例子可能结合了某种数据库工具,例如Hibernatet。在实际应用中,...

    java事务 - 传递Connection

    Spring框架提供了更高级别的事务管理功能,包括编程式事务管理和声明式事务管理,可以简化事务处理,并提供事务传播行为等高级特性。 综上所述,Java事务管理的核心是`Connection`对象的正确使用和管理。通过共享同...

    spring事务全解释

    在Spring框架中,事务管理是核心功能之一,它使得开发者能够方便地控制数据库操作的原子性、一致性、隔离性和持久性,确保数据的完整性和可靠性。本文将深入解析Spring中的事务管理机制。 首先,我们需要理解事务的...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    Spring提供了对多种数据源的支持,包括JDBC DataSources和Transaction Managers。通过Spring的配置,我们可以轻松地管理多个数据源,并根据业务逻辑进行动态切换。这通常涉及到使用`@Qualifier`注解来指定特定的...

    spring分别与jdbc和hibernate结合的事务控制--案例

    本案例重点探讨了Spring如何与两种流行的数据访问技术——JDBC(Java Database Connectivity)和Hibernate——相结合,进行事务管理。事务控制是确保数据库操作一致性、完整性的关键,尤其在多步骤操作中,它能防止...

    spring事务管理.doc

    使用JDBC进行事务管理时,通常涉及DataSource、Connection的获取和释放,以及事务的开启、提交和回滚。这种手动管理方式可能导致代码冗长且易出错。 Spring的事务管理解决了这些问题。它基于AOP(面向切面编程)...

    spring事务管理

    - 在JDBC中,可以通过设置`connection.setAutoCommit(false)`关闭自动提交,然后通过`connection.commit()`和`connection.rollback()`手动控制事务的提交和回滚。 3. Spring 事务管理: - Spring 提供了`...

Global site tag (gtag.js) - Google Analytics