请选择 进入手机版 | 继续访问电脑版

记一次mybatisplus.IService.saveOrUpdate可能导致脏数据

[复制链接]
尊悦模具刘沛昌 发表于 2020-12-31 19:20:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 com.baomidou.mybatisplus.extension.service.IService.saveOrUpdate
@version 乐观锁机制
        // 执行saveOrUpdate操纵
        //
        // 注意: 如果在entity中version字段加了@version.
        // 在使用saveOrUpdate这个方法时.一定要注意使用version字段.它在sql的where后会加version...那么
        // 当传入的version值和数据库不一致时.则无法掷中到数据.
        // 这时saveOrUpdate在操纵数据时updateById返回false.这时候saveOrUpdate就会去执行save操纵.这样导致脏数据出现的情况.
        // 切记
  1.  
复制代码
  1.         // 执行saveOrUpdate操纵        //        // 注意: 如果在entity中version字段加了@version.        // 在使用saveOrUpdate这个方法时.一定要注意使用version字段.它在sql的where后会加version...那么        // 当传入的version值和数据库不一致时.则无法掷中到数据.        // 这时saveOrUpdate在操纵数据时updateById返回false.这时候saveOrUpdate就会去执行save操纵.这样导致脏数据出现的情况.        // 切记        boolean res = userService.saveOrUpdate(userInfo);
复制代码
 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveOrUpdate的实现方法
  1. /**     *      * TableId 注解存在更新纪录,否插入一条纪录     *
  2.      *     * @param entity 实体对象     * @return boolean     */    @Transactional(rollbackFor = Exception.class)    @Override    public boolean saveOrUpdate(T entity) {        if (null != entity) {            Class cls = entity.getClass();            TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);            if (null != tableInfo && StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {                Object idVal = ReflectionKit.getMethodValue(cls, entity, tableInfo.getKeyProperty());                if (StringUtils.checkValNull(idVal)) {                    return save(entity);                } else {                    /*                     * 更新成功直接返回,失败执行插入逻辑                     */                    return updateById(entity) || save(entity);                }            } else {                throw ExceptionUtils.mpe("Error:  Can not execute. Could not find @TableId.");            }        }        return false;    }
复制代码
 

来源:https://blog.csdn.net/hhj13978064496/article/details/111998383
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )