mybatisplus 嵌套事务
时间: 2023-11-09 19:03:31 浏览: 233
mybatisplus 默认使用 Spring 的事务管理器,因此可以使用 Spring 的事务注解来控制事务。在嵌套事务的情况下,可以使用 @Transactional 注解的 propagation 属性来指定事务的传播行为。如果需要在嵌套事务中进行回滚,则需要在外层事务中抛出 RuntimeException 或 Error 异常。
例如,以下代码演示了如何在嵌套事务中进行回滚:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void updateUser(User user) {
userMapper.updateById(user);
try {
// 嵌套事务
updateUserDetail(user);
} catch (Exception e) {
// 抛出异常,回滚事务
throw new RuntimeException(e);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateUserDetail(User user) {
// 更新用户详情
// 抛出异常,回滚事务
throw new RuntimeException("更新用户详情失败");
}
}
```
在上面的代码中,updateUser 方法和 updateUserDetail 方法都使用了 @Transactional 注解。updateUser 方法中调用了 updateUserDetail 方法,由于 updateUserDetail 方法的 propagation 属性设置为 REQUIRES_NEW,因此会开启一个新的事务。当 updateUserDetail 方法抛出异常时,由于该方法是在新的事务中执行的,因此只会回滚 updateUserDetail 方法中的操作,而不会影响到 updateUser 方法中的操作。
阅读全文