Mybatisplus同时向两张表里插入数据[事务的一致性]

一、需求:把靶器官的数据,单独拿出来作为一个从表,以List的方式接收这段数据;

此时分析,是需要有两个实体的,一个是主表的实体,一个是从表的实体,并在主表实体新增一个List 字段来接收从表的实体数据 -----> 

二、建立两个实体:SysResidentReplenish (主表实体)、SysResidentReplenishDetail(从表实体)

/** 靶器官筛查情况列表 */
    @TableField(exist = false)
    private List targetList;

三、如下为原型图

Mybatisplus同时向两张表里插入数据[事务的一致性]_第1张图片

四、分析实现:当前端传过来的数据,如何同时保存在主表 和 从表中

此处注意:不能采用先存入一张表,再存入另一张表的状态;

要注意事务的特性,即:当有一张表 插入不成功的时候,另一张表存入的数据可以回滚。

如此,基于springBoot 项目 采用的方式

接口继承了IService 

IService 中有许多的方法

五、重写方法

serviceImpl 代码:

  /**
    * @描述:  重写 IService中 boolean insert(T var1);
    * 重写的插入方法实现了事务管理,当子表插入失败,主表已经插入的数据会回滚
    * @param
    * @return boolean
    */

    public boolean save(SysResidentReplenish sysResidentReplenish){
        try {
            sysResidentReplenishMapper.insert(sysResidentReplenish);
            List targetList = sysResidentReplenish.getTargetList();

            for (SysResidentReplenishDetail sysResidentReplenishDetail:targetList) {
                sysResidentReplenishDetail.setRecordId(sysResidentReplenish.getId());
                sysResidentReplenishDetailMapper.insert(sysResidentReplenishDetail);
            }
        }catch (Exception e){
            System.out.println("error插入子表失败:"+e.getMessage());
            return false;
        }
        return true;
    }

你可能感兴趣的:(spring,boot,后端)