<!--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结合使用,Spring负责整体的控制流程和依赖管理,而Hibernate则专注于数据持久化。通过Spring的Transaction Management,我们可以轻松地配置和管理数据库事务,使得在服务层的...
在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...
使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用
你可以使用`JdbcTemplate.execute(...)`, `JdbcTemplate.update(...)`等方法,并结合Spring的事务注解(如`@Transactional`)来实现事务控制。例如,当一组数据库操作需要一起成功或一起失败时,可以将这些操作放在...
在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...
总结而言,JdbcTemplate为开发者提供了一个便捷的方式来处理数据库操作,而声明式事务管理则使得事务控制变得更加简单、灵活。通过结合使用这两种技术,我们可以构建出高效、健壮的企业级应用程序。
- 避免过度使用`JdbcTemplate`,对于复杂查询和事务,可以考虑使用ORM框架如Hibernate或MyBatis。 - 使用预编译的SQL(PreparedStatement)来防止SQL注入。 - 对于分页查询,确保正确设置分页参数以优化查询性能...
首先,让我们了解在不使用JDBCTemplate时,传统的JDBC操作通常涉及以下步骤:加载驱动、建立数据库连接、创建Statement或PreparedStatement对象、执行SQL、处理结果集、关闭资源。这个过程繁琐且容易出错,尤其是在...
在实际项目中,我们通常会结合MyBatis或Hibernate等ORM框架一起使用JdbcTemplate,以达到更好的灵活性和性能优化。JdbcTemplate作为一个轻量级的解决方案,特别适合那些对数据库操作需求相对简单,但又希望避免手动...
Struts2、Hibernate、Spring、JdbcTemplate以及EXT是Java Web开发中的重要框架和技术,它们各自在应用程序的不同层面发挥着关键作用。将这些技术整合在一起,可以构建出高效、灵活且可维护的Web应用。 1. **Struts2...
集成Hibernate时,Spring通过声明式事务管理(Declarative Transaction Management)简化了事务的处理,使得开发者无需手动编写事务控制代码。 **Hibernate 3.3** 是一个流行的Java对象关系映射(Object-Relational...
声明式事务管理则是通过在配置文件中声明事务规则,使用 AOP 切面进行事务控制,适用于大部分情况,因为它可以实现事务的统一管理和隔离。 Spring 和 Hibernate 整合的关键步骤包括: 1. 添加 Spring 和 Hibernate ...
使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用 ...
3. **避免执行更新操作**:尽管`JdbcTemplate`也支持执行更新操作,但在某些情况下,如使用Hibernate进行数据持久化时,建议避免使用`JdbcTemplate`执行更新操作,以免影响Hibernate的二级缓存。 综上所述,`...
3. **事务管理**:Spring的事务管理能力可以与JdbcTemplate结合使用,实现自动的事务回滚和提交,降低了事务处理的复杂性。 4. **异常处理**:JdbcTemplate将JDBC抛出的SQLException转换为Spring的...
4. 创建DAO层:使用Spring的JdbcTemplate或Hibernate的Session接口进行数据库操作,Spring会自动管理事务。 5. 创建Service层:业务逻辑层,通过@Autowired注解注入DAO,Spring会自动完成依赖注入。 6. 编写...
Spring JdbcTemplate是Spring框架中用于简化数据库操作的一个重要组件,它是Spring对JDBC的轻量级封装,旨在提供一种结构良好、易于使用的SQL执行机制,同时保持了JDBC的灵活性。在本实例中,我们将深入探讨Spring ...
通过理解并熟练运用Spring JDBC和JdbcTemplate,开发者可以高效、安全地进行数据库操作,同时避免了传统JDBC的繁琐和错误易发性。在实际项目中,结合Spring的其他模块,如MyBatis或Hibernate,可以构建出强大的数据...
Spring的JdbcTemplate或JPA(Java Persistence API)支持可以与Hibernate结合使用,进一步简化数据访问层的开发。 文档中可能包括了以下内容: 1. Spring框架概述:介绍Spring的基本概念、核心模块和使用场景。 2. ...
在实际使用"spring-hibernate3.jar"时,我们需要理解Spring和Hibernate的集成原理。首先,Spring通过其优秀的AOP支持,可以实现对Hibernate的事务管理,使得事务的处理更加透明。其次,Spring的ApplicationContext...