首页 > 编程语言 > 详细

《SpringBoot事务》单机mybatis事务控制

时间:2020-07-06 22:59:40      阅读:58      评论:0      收藏:0      [点我收藏+]

一、场景再现

  我们同时操作两张表及以上,一张表操作成功后,第二张表操作失败,此时需要回滚上一次的操作。

或者两次操作都成功,但后续业务处理的时候异常,此时需要回滚前面的所有数据库操作。

 

二、代码

 1 @Service
 2 public class SiteWorkOrderServiceImpl implements ISiteWorkOrderService {
 3 
 4     @Override
 5     //在类或方法前注解配置@Transactional(rollbackFor=Exception.class)就可以实现:
 6     //当发生受控异常(checked exceptions)时,事务也进行回滚。
 7     @Transactional(rollbackFor=Exception.class)
 8     public void createOrder() throws BaseBusinessException {
 9        
10     //第一次操作数据库        
11     cbiOrderProcess.setWorkOrderNo(orderNo);       
12     cbiOrderProcess.setTaskId(body.get("taskId"));     
13     int insertNum = cbiOrderProcessMapper.insert(cbiOrderProcess);
14     Assert.isTrue(insertNum >0, "插入结果为空"); //利用Assert代替if
15 
16     //第二次操作数据库
17     SiteWorkOrder siteWorkOrder = new SiteWorkOrder();
18     //Assert.isTrue(1==2); //测试回滚
19     int orderNum = siteWorkOrderMapper.insert(siteWorkOrder);
20     Assert.isTrue(orderNum >0, "插入结果为空");
21   }
22 }

 

三、现象描述

  1、断点调试时,第一次操作完成,此时我们刷新数据库,实际是没有数据的

  2、抛出异常,程序终止,数据库没有数据

  3、要是第一次操作,表中有自增id,此时实际id已经自增,因为底层是序列,查询一次增加一次,要想回去,只能删除序列重新建。

《SpringBoot事务》单机mybatis事务控制

原文:https://www.cnblogs.com/weipt0106/p/13257970.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!