1. 事务的回顾
在 MySQL 学习阶段,已经了解到了事务是一组操作的集合,也就是把所有的操作作为一个整体,一起向数据库提交或者撤销操作,要么同时成功,要么同时失败。
一个事务的操作流程包括了,开启事务,执行事务操作,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务。
2. 事务的实现方式
2.1. 编程式事务
Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager(事务管理器)来进行上述事务的操作,还需要用到 TransactionDefinition(事务的属性,获取事务时需要把这个类的对象传进去)。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
private TransactionDefinition transactionDefinition;
@RequestMapping("/register")
public String register(String name, String password) {
// 开启事务,获取一个状态,之后回滚就回滚到了这个状态
TransactionStatus transaction = dataSourceTransactionManager.getTransaction(transactionDefinition);
Integer result = userService.insert(name, password);
// 提交事务(提交的是之前获取的状态)
dataSourceTransactionManager.commit(transaction);
return "注册成功";
}
}
测试之后数据也是正常更新了。
回滚的话调用的是 rollback 方法,再次进行插入数据,数据就没有更新,不过自增 id 还是变成了 3,对比提交事务的日志可以看出,这次没有提交事务的信息了。
2.2. 声明式事务
上面的方式是比较麻烦的,需要自己写一大堆信息,来看声明式事务是如何操作的。
首先需要添加依赖:
<dependency>
<groupId>org.springframework</>
spring-tx


