最近进行多表操作时,会使用到事务。但是数据库事务不了解,百度之后,使用框架事务**@Transactional**来进行设置,参考百度,自己觉得使用手动回滚可能好一些,所以目前仅记录一下手动回滚的用法
具体用法如下:
@Override
@Transactional(rollbackFor = Exception.class,transactionManager = "transactionManager")
public boolean upsertXxx(Xxx xxx) {
try {
// 先对xxx表进行更新操作
Xxx1Mapper.upsertXxx(xxx);
// 判断返回的id,若存在则进行下一张表的更新操作,不存在则抛出异常,并回滚
if (xxx.getId() <= 0) {
throw new Exception("更新失败!");
}
// 上一张表操作成功,则对第二张表进行操作
long result = YyyMapper.upsertYyy(xxx);
// 判断是否成功,若成功则返回true,若不成功则抛出异常,并回滚
if (result <= 0) {
throw new Exception("更新失败!");
}
return true;
} catch (Exception e) {
e.printStackTrace();
// 回滚操作
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
设置正确的transactionManager,若设置不对,事务不会起作用。(目前不知道该如何设置,之前是由于设置错误,通过报的错找到正确的设置)