【LSP】SpringMVC+MyBatis 事务管理

1679644933   ·   发表于 2个月前   ·   编程代码

spring事务管理包含两种情况,编程式事务、声明式事务。而声明式事务又包括基于注解@Transactional和tx+aop的方式。那么本文先分析编程式注解事务和基于注解的声明式事务。 编程式事务管理使用TransactionTemplate或者PlatformTransactionManager。对于编程式事务spring推荐使用TransactionTemplate。一、编程式事务spring事务特性 spring中所有的事务策略类都继承自org.springframework.transaction.PlatformTransactionManager接口public interface PlatformTransactionManager {TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;void commit(TransactionStatus status) throws TransactionException;void rollback(TransactionStatus status) throws TransactionException;} 编程式事务TransactionTemplate需要手动在代码中处理事务,一般不推荐使用,也不符合spring的思想,因为它直接耦合代码,但各有利弊。先看下TransactionTemplate的源码。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990public class TransactionTemplate extends DefaultTransactionDefinitionimplements TransactionOperations, InitializingBean {

}  从上面的代码可以看到核心方法是execute,该方法入参TransactionCallback。查看TransactionCallback源码:123public interface TransactionCallback {T doInTransaction(TransactionStatus status);} 那么以上两个源码可以确定我们使用编程式事务管理的方式也就是自己需要重写doInTransaction()。OK,那么我们手动使用TransactionTemplate处理下。

0 Reply   |  Until 2个月前 | 4263 View
LoginCan Publish Content