zoukankan      html  css  js  c++  java
  • 《SpringBoot事务》单机mybatis事务控制

    一、场景再现

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

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

    二、代码

     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已经自增,因为底层是序列,查询一次增加一次,要想回去,只能删除序列重新建。

  • 相关阅读:
    4月7日工作日志
    5月4日工作日志
    4月7日工作日志
    4月1日工作日志
    3月31日工作日志
    3月31日工作日志
    对元素绑定事件方法
    css实现垂直居中的各种方法
    纯css写一个switch开关
    弹性盒模型flex布局
  • 原文地址:https://www.cnblogs.com/weipt0106/p/13257970.html
Copyright © 2011-2022 走看看