1.事务基础
- 事务: 是一种能够保证同一个业务中多个写(增删改)操作要么全部成功,要么全部失败的机制
- 在业务方法上添加
@Transactional
即可保证此方法是业务性(要么全部成功,要么全部失败)的。 - 在Spring JDBC中,处理事务的机制大致是:
开启事务:Begin
try {
你的业务方法
提交:Commit
} catch (RuntimeException e) {
回滚:Rollback
}
- 所以,为了保证事务性,所有的写操作在执行之后,必须有某个判定为失败的标准,且判断定为失败后,必须抛出
RuntimeException
或其子孙类异常! - Spring JDBC默认对
RuntimeException
进行回滚处理,有必要的话,也可以配置为其它异常类型
- 使用
- 当需要方法是事务性的,可以使用
@Transactional
注解,此注解可以添加在:
- 接口
- 接口中的抽象方法上
- 会使得此接口的实现类中,重写的此方法是事务性的
- 只作用于当前方法
- 如果接口上也配置了此注解,并且接口和抽象方法的注解均配置了参数,以方法上的配置为准
- 业务实现类
- 业务实现类中的方法
- Spring JDBC是通过接口代理的方式进行事务管理,所以,只对接口中声明的方法有效!
- 通常,应该将
@Transactional
添加在接口中的抽象方法上(如果偷懒,或为了避免遗漏,也可以直接添加在接口上)。
3.依赖项
<!-- Mybatis Spring Boot:Mybatis及对Spring Boot的支持 -->
<!-- 仅需要保留spring-jdbc,使得业务接口可以使用@Transactional注解 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>