Mybatispuls修改数据,同时向两表后插入数据时,采用先删除再插入, 不以主键为删除的情况时~

重写 boolean updateById(T entity  的方法;

重写的插入方法实现了事务管理,当子表插入失败,主表已经插入的数据会回滚

记得添加注解:@Transactional

   @Transactional
    public boolean updateById(SysResidentReplenish sysResidentReplenish){
        try{
            sysResidentReplenishMapper.updateById(sysResidentReplenish);
            List targetList = sysResidentReplenish.getTargetList();

            LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();

            for (SysResidentReplenishDetail sysResidentReplenishDetail:targetList) {
                wrapper.eq(SysResidentReplenishDetail::getRecordId,sysResidentReplenish.getId());

                sysResidentReplenishDetailMapper.delete(wrapper);
                sysResidentReplenishDetail.setRecordId(sysResidentReplenish.getId());

                sysResidentReplenishDetailMapper.insert(sysResidentReplenishDetail);

            }

        }catch (Exception e){
            System.out.println("error修改子表失败:"+e.getMessage());
            return false;
        }
        return true;
    }

此处要注意  这里 delete 的用法:

此处因需求原因  不以主键为删除时

LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();

wrapper.eq(SysResidentReplenishDetail::getRecordId,sysResidentReplenish.getId());

sysResidentReplenishDetailMapper.delete(wrapper);

用这样的方式:即 当主表的id =  从表的recordId 时,删除数据

你可能感兴趣的:(java,数据库)