美文网首页“坑”就一个字
逻辑删除@TableLogic好是好, 就是要注意细节!

逻辑删除@TableLogic好是好, 就是要注意细节!

作者: 码哥说 | 来源:发表于2022-03-30 17:59 被阅读0次

前言

用过MyBatis-Plus的自然知道它的好, 方便省心.

不过在不注意一些特性的情况下, 还是容易踩坑的.

业务系统上针对一些数据的删除, 常常保险的做法就是逻辑删除, 所以开发大佬常常会用个字段来标识一下“删除”状态, 然后不厌其烦的使用“where”来隔离那些删除的数据.

对此, MyBatis-Plus很友善的提供了 @TableLogic 注解来实现逻辑删除功能

@TableLogic(delval = "1", value = "0")
private Integer isDeleted;

只需要对实体类加上注解, 后续但凡你使用MyBatis-Plus自动注入的sql语句, 均会自动补上
"where is_deleted = 0"

能省不少事.

所以, 咸鱼也放心的使用了该注解,

直到某天生产爆雷

大佬找到我

“怎么已删除的数据没法恢复呢?”

问题排查

业务场景大概如下, 系统需要提供MQ监听上游的数据变化, 其中就包含了数据的删除和恢复.

  • 删除使用了@TableLogic(delval = "1", value = "0")以及BaseMapper的deleteById()

  • 恢复则使用了BaseMapper的updateById()

于是, 问题就出现了, 本以为更新sql是

update is_deleted = 0 where id = xxx

但因为使用了@TableLogic(delval = "1", value = "0"), 和BaseMapper自动注入的方法, 所以最终执行的sql都会拼接上"where is_deleted = 0"

update is_deleted = 0 where id = xxx and is_deleted = 0 

所以最终数据恢复了个寂寞

image.png

参考官网文档说明
https://baomidou.com/pages/6b03c5/#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95

解决方式

既然用MyBatis-Plus自动注入的sql语句会又问题, 那么只能自己重新完全定义sql来实现数据的逻辑恢复了.

请关注我的订阅号

订阅号.png

相关文章

  • 逻辑删除@TableLogic好是好, 就是要注意细节!

    前言 用过MyBatis-Plus的自然知道它的好, 方便省心. 不过在不注意一些特性的情况下, 还是容易踩坑的....

  • @TableLogic 逻辑删除

    @TableLogic 逻辑删除 实体类字段上加上@TableLogic注解 效果: 使用mp自带方法删除和查找都...

  • Mybatis plus逻辑删除注解@TableLogic

    首先这个注解是苞米豆出品,也就是我们常说的mybatis升级版的东西。简单讲一下这个注解的用法:我们在做数据库设计...

  • 新闻人

    新闻就是讲故事 人是最重要的 把握好逻辑、细节和节奏

  • 上课就是讲故事

    人是最重要的,有悬念,把握好逻辑、细节和节奏。

  • 注解

    @TableLogic在使用了这个注解后,调用删除的方法就变成更新了@TableName("t_schedule_...

  • 成绩好就是品德好的混账逻辑

    自汉代以来,所有朝代的明君都以孝治天下。长官只是给你官职,给你名和利,父母给了你生命,并且养育你长大。生父母和...

  • 相机还是二手的好,二手相机怎么选?

    老婆是一手的好,相机还是二手的好,买二手相机要注意什么呢? 其实我想说的第一个点就是要合理,合情合理合逻辑,你要考...

  • 宝宝好睡眠需要注意的细节!

    宝宝张嘴睡觉 如果一个孩子,不经常用鼻子呼吸的话,那鼻腔发育会受影响,鼻腔发育受影响以后,鼻子就不会那么高,鼻梁就...

  • 12.28日精进

    工作中还是要注意细节,有很多细节已经被我们所忽略,,有些客户能看到的我们却浑然不知,把握好每一个细节,客户都看在眼里

网友评论

    本文标题:逻辑删除@TableLogic好是好, 就是要注意细节!

    本文链接:https://www.haomeiwen.com/subject/xncarrtx.html