SpringCloud整合MyBatis-Plus逻辑删除配置错误时可能导致的严重后果

首先声明:本文拒绝贩卖焦虑感,看到此文的您,请务必克制焦虑情绪的产生!
但是,还是要如实说明一下,以防万一。如果逻辑删除配置错误的话,可能导致的严重后果就是数据被物理删除。如果灾备方案不完善的话,极有可能导致数据丢失,因此,需要格外小心!

一般情况下,控制逻辑删除的字段命名为isDeleted(是否删除)或isShow(是否显示),或者类似的名称。但对于同一个值来说,isDeleted和isShow一般表示相反的意思。如:
isDeleted=1,一般表示逻辑删除,即不显示;
而isShow=1,一般表示未逻辑删除,即显示。

对于SpringCloud整合MyBatis-Plus的情况而言,逻辑删除的默认配置和上面的isDeleted类型的表示方法一致。这种情况下,按照默认的配置使用就行了。默认情况下的使用方法,请参考:MyBatis-Plus官方文档

如果是isShow之类的相反的情况,就需要额外更改几个地方。具体可参考如下两种方案:

方案一:
步骤1:修改application.yml中的mybatis-plus部分配置:

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
     	id-type: auto
        logic-delete-field: isShow  # (本方案需要的修改)全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
        logic-delete-value: 0 # (本方案需要的修改)逻辑已删除值(默认为1,此处应设置为0)
        logic-not-delete-value: 1 # (本方案需要的修改)逻辑未删除值(默认为0,此处应设置为1)

步骤2(此步骤不需要执行,仅作对比之用!):在实体类xxxEntity.java中,为isShow属性添加@TableLogic注解:

/**
* 是否显示[0-不显示,1显示]
*/
//@TableLogic(value = "1", delval = "0")(此处已注释,添加了步骤1的logic-delete-field后,不再需要添加注解)
private Integer isShow;

-----------------------------------------------------方案之间的分割线------------------------------------------------
方案二:

步骤1:修改application.yml中的mybatis-plus部分配置:

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
     	id-type: auto
        # logic-delete-field: isShow  #(此行不需要配置,已注释) 
        logic-delete-value: 1 # (本方案需要的修改)逻辑已删除值(默认为 1)
        logic-not-delete-value: 0 # (本方案需要的修改)逻辑未删除值(默认为 0)

步骤2:在实体类xxxEntity.java中,为isShow属性添加@TableLogic注解:

/**
* 是否显示[0-不显示,1显示]
*/
@TableLogic(value = "1", delval = "0")  //(本方案需要的修改)
private Integer isShow;

如果上面的配置0和1配置相反或者错误的话,可能实现不了预期效果。
如果将控制逻辑删除属性名称配置错误的话,如将isShow错拼成了isShown,就有可能使逻辑删除变为物理删除,最终导致数据误删。建议需要这种配置的时候,一定要慎之又慎!

猜你喜欢

转载自blog.csdn.net/shinyolive/article/details/111823946