事务是数据库操作最基本的单元,是逻辑上的一组操作,这一组操作在同一个会话中要么都执行成功,要么都失败,这也是事务的最基本特性–原子性。事务的作用是为了保证系统数据的正确性,因此,数据库应用程序中是会经常用到事务。下面就说一下在Spring里怎么做事务操作。
Spring事务使用方式
Spring事务使用方式分两类,分别是编程式事务、声明式事务。
编程式事务
使用编程式事务,事务操作的代码跟业务逻辑代码耦合度高,这样会造成代码的维护成本较大。因此,除非需要细粒度的控制各个事务的边界,否则一般不会用到这种方式。
声明式事务
声明式事务控制粒度就比较粗糙,但使用这种方式可以做到全局配置,能实现与业务逻辑代码解耦,代码的维护成本较小。这也是经常用到的一种方式。声明式事务的实现完全依赖于Spring的AOP机制,其本质就是通过AOP在目标方法执行之前加入事务,在目标方法执行之后根据方法执行结果选择是执行回滚操作还是执行提交操作。
声明式事务配置的5种方式
这里主要说一下声明式事务的配置方式。Spring事务配置总是由三个部分组成:分别是DataSource、TransactionManager和代理机制这三部分。无论哪种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问 时,DataSource实际为SessionFactory,TransactionManager的实现为 HibernateTransactionManager。
根据代理机制的不同,总结了五种Spring事务的配置方式,各种方式配置文件如下:
第一种方式:每个Bean都有一个代理
PROPAGATION_REQUIRED
第二种方式:所有Bean共享一个代理基类
PROPAGATION_REQUIRED
第三种方式:使用拦截器
PROPAGATION_REQUIRED
*Dao
transactionInterceptor
第四种方式:使用tx标签配置的拦截器
第五种方式: @Transactional
注解
配置后,在DAO上需加上 @Transactional
注解,如下:
@Transactional
@Component("goodsDao")
public class GoodsDaoImpl extends HibernateDaoSupport implements GoodsDao {
public List goodsList() {
return this.getSession().createQuery("from Goods").list();
}
}
Original: https://www.cnblogs.com/ayic/p/16751967.html
Author: Yi00
Title: Spring事务(一)-事务配置
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577958/
转载文章受原作者版权保护。转载请注明原作者出处!