`

九、同时使用jdbcTemplate和hibernate时,事务控制

 
阅读更多

<!--Hibernate TransactionManager-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

 

<!-- 以AspectJ方式 定义 AOP -->
    <aop:config>
        <aop:pointcut id="cuccpayManagerOperations" expression="execution(* com.ygtime.man.busi..*Manager.*(..))" />
        <aop:pointcut id="coreManagerOperations" expression="execution(* com.ygtime.man.core..*Manager.*(..))" />
        <aop:pointcut id="securityManagerOperations" expression="execution(* com.ygtime.man.security..*Manager.*(..))" />
        <aop:pointcut id="logManagerOperations" expression="execution(* com.ygtime.man.log..*Manager.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="cuccpayManagerOperations" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="coreManagerOperations" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="securityManagerOperations" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="logManagerOperations" />
    </aop:config>

    <!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,其余方法按默认设置.默认的设置请参考Spring文档事务一章. -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true" propagation="REQUIRED" />
            <tx:method name="find*" read-only="true" propagation="REQUIRED" />
            <tx:method name="query*" read-only="true" propagation="REQUIRED" />
            <tx:method name="show*" read-only="true" propagation="REQUIRED" />
            <tx:method name="list*" read-only="true" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED"
                rollback-for="com.ygtime.man.core.exception.BusinessException" />
        </tx:attributes>
    </tx:advice>

 

public class ShopInfoManagerImpl{

 

    @Override
    public void depositReturn(long shopId, double money, SysUser sysUser) {
        
        int deposit = jdbcTemplate.queryForInt(
            "select deposit from TM_PAY_SHOP_INFO where id=? for update", new Object[] { shopId });
        
        if (new Money(money).getCent() > deposit) {
            throw new BusinessException("充值回退失败:余额不足");
        } else {
            
            jdbcTemplate.update("update TM_PAY_SHOP_INFO set deposit=? where id=?", new Object[] {
                    deposit - new Money(money).getCent(), shopId });
            
        }
        
        saveJournal(shopId, money, sysUser, DepositChangeJournal.CHANGE_TYPE_RETURN,
            DepositChangeJournal.CHANGE_STATUS_SUCCESS);
        
        int i = 1 / 0;
        System.out.println(i);
        
    }   

}

 

那么depositReturn方法里面的jdbcTemplate的操作,都在事务控制之类。

在执行int i = 1 / 0;System.out.println(i);之后,所有都会回滚。

而不再是每执行一次jdbcTemplate都会自动提交jdbcTemplate的事务。

分享到:
评论

相关推荐

    Spring + Hibernate + JdbcTemplate

    在大型项目中,Spring通常与Hibernate结合使用,Spring负责整体的控制流程和依赖管理,而Hibernate则专注于数据持久化。通过Spring的Transaction Management,我们可以轻松地配置和管理数据库事务,使得在服务层的...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...

    使用maven构建项目,spring mvc,spring,与jdbctemplate,hibernate,mybatis整合

    使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用

    _Spring_使用 JdbcTemplate和JdbcDaoSupport.rar

    你可以使用`JdbcTemplate.execute(...)`, `JdbcTemplate.update(...)`等方法,并结合Spring的事务注解(如`@Transactional`)来实现事务控制。例如,当一组数据库操作需要一起成功或一起失败时,可以将这些操作放在...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate

    在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...

    day4-Spring JdbcTemplate & 声明式事务.md

    总结而言,JdbcTemplate为开发者提供了一个便捷的方式来处理数据库操作,而声明式事务管理则使得事务控制变得更加简单、灵活。通过结合使用这两种技术,我们可以构建出高效、健壮的企业级应用程序。

    SpringJdbcTemplate封装工具类

    - 避免过度使用`JdbcTemplate`,对于复杂查询和事务,可以考虑使用ORM框架如Hibernate或MyBatis。 - 使用预编译的SQL(PreparedStatement)来防止SQL注入。 - 对于分页查询,确保正确设置分页参数以优化查询性能...

    spring jdbcTemplate 源码

    首先,让我们了解在不使用JDBCTemplate时,传统的JDBC操作通常涉及以下步骤:加载驱动、建立数据库连接、创建Statement或PreparedStatement对象、执行SQL、处理结果集、关闭资源。这个过程繁琐且容易出错,尤其是在...

    jdbcTemplate相关jar包.zip

    在实际项目中,我们通常会结合MyBatis或Hibernate等ORM框架一起使用JdbcTemplate,以达到更好的灵活性和性能优化。JdbcTemplate作为一个轻量级的解决方案,特别适合那些对数据库操作需求相对简单,但又希望避免手动...

    struts2+hibernate+spring+jdbctemplate+EXT集成实例

    Struts2、Hibernate、Spring、JdbcTemplate以及EXT是Java Web开发中的重要框架和技术,它们各自在应用程序的不同层面发挥着关键作用。将这些技术整合在一起,可以构建出高效、灵活且可维护的Web应用。 1. **Struts2...

    spring3.0+hibernate3.3+mysql8.0

    集成Hibernate时,Spring通过声明式事务管理(Declarative Transaction Management)简化了事务的处理,使得开发者无需手动编写事务控制代码。 **Hibernate 3.3** 是一个流行的Java对象关系映射(Object-Relational...

    浅谈Spring+Hibernate整合(共16页).doc

    声明式事务管理则是通过在配置文件中声明事务规则,使用 AOP 切面进行事务控制,适用于大部分情况,因为它可以实现事务的统一管理和隔离。 Spring 和 Hibernate 整合的关键步骤包括: 1. 添加 Spring 和 Hibernate ...

    非常好的JavaSpring项目资源,分享出来.zip

    使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用 ...

    JdbcTemplate查询

    3. **避免执行更新操作**:尽管`JdbcTemplate`也支持执行更新操作,但在某些情况下,如使用Hibernate进行数据持久化时,建议避免使用`JdbcTemplate`执行更新操作,以免影响Hibernate的二级缓存。 综上所述,`...

    jdbcTemplate-spring对jdbc的支持

    3. **事务管理**:Spring的事务管理能力可以与JdbcTemplate结合使用,实现自动的事务回滚和提交,降低了事务处理的复杂性。 4. **异常处理**:JdbcTemplate将JDBC抛出的SQLException转换为Spring的...

    Spring SpringMVC Hibernate整合

    4. 创建DAO层:使用Spring的JdbcTemplate或Hibernate的Session接口进行数据库操作,Spring会自动管理事务。 5. 创建Service层:业务逻辑层,通过@Autowired注解注入DAO,Spring会自动完成依赖注入。 6. 编写...

    Spring JdbcTemplate查询实例

    Spring JdbcTemplate是Spring框架中用于简化数据库操作的一个重要组件,它是Spring对JDBC的轻量级封装,旨在提供一种结构良好、易于使用的SQL执行机制,同时保持了JDBC的灵活性。在本实例中,我们将深入探讨Spring ...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    通过理解并熟练运用Spring JDBC和JdbcTemplate,开发者可以高效、安全地进行数据库操作,同时避免了传统JDBC的繁琐和错误易发性。在实际项目中,结合Spring的其他模块,如MyBatis或Hibernate,可以构建出强大的数据...

    spring+Hibernate开发文档

    Spring的JdbcTemplate或JPA(Java Persistence API)支持可以与Hibernate结合使用,进一步简化数据访问层的开发。 文档中可能包括了以下内容: 1. Spring框架概述:介绍Spring的基本概念、核心模块和使用场景。 2. ...

    spring-hibernate3.jar.zip

    在实际使用"spring-hibernate3.jar"时,我们需要理解Spring和Hibernate的集成原理。首先,Spring通过其优秀的AOP支持,可以实现对Hibernate的事务管理,使得事务的处理更加透明。其次,Spring的ApplicationContext...

Global site tag (gtag.js) - Google Analytics