Skip to content
广告❤️成为赞助商

逻辑删除

逻辑删除为兼容各种数据类型,故设计为 String 类型;逻辑删除字段填充建议方案:使用数据库默认字段 > 其次是手动设置 > 框架自带拦截器 > 自定义拦截器

配置文件

  • 我们需要在配置文件中配置一些额外的配置(可缺省:默认不开启逻辑删除功能)
yaml
mongo-plus:
  configuration:
    logic:
      open: true                    # 开启逻辑删除功能
      auto-fill: true               # 开启拦截器自动填充逻辑删除字段(开启逻辑删除功能前提下生效,推荐使用数据库默认字段以及实体默认字段,减少对文档的拦截修改)
      logic-delete-field: logicDel  # 全局逻辑删除字段(string 类型)
      logic-delete-value: 1         # 标记逻辑删除值
      logic-not-delete-value: 0     # 标记逻辑未删除值

逻辑删除 -> @CollectionLogic注解

  • 配置全局逻辑删除,需要自定义逻辑删除字段及标记值
  • 配置全局逻辑删除,需要忽略该文档不进行逻辑删除

注解属性介绍:

  • 接下来我们简单看下注解属性信息
java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface CollectionLogic {

    /**
     * 开启全局配置 并忽略该文档(任意补充在某一个字段上,建议跟@ID 相同即首个字段)
     */
    boolean close() default false;

    /**
     * 默认逻辑未删除值(该值可无、会自动获取全局配置)
     */
    String value() default "";

    /**
     * 默认逻辑删除值(该值可无、会自动获取全局配置)
     */
    String delval() default "";

}

自定义逻辑删除字段示例:

  • 接下来我们用一个简单的案例来进行自定义逻辑删除字段操作
java
@CollectionName(value = "mongoTest")
public class MongoTest {

    @ID(type = IdTypeEnum.AUTO)
    private String id;

    private String userName;

    /**
     * 标记该文档不适用全局配置的 logicDel
     * 使用 logic 作为逻辑删除字段,true=逻辑删除,false=逻辑未删除
     */
    @CollectionLogic(value = "true", delval = "false")
    private String logic;

}

忽略该文档不进行逻辑删除示例:

  • 接下来我们用一个简单的案例来进行忽略该文档不进行逻辑删除操作
java
@CollectionName(value = "mongoTest")
public class MongoTest {

    /**
     * 标记该文档不进行逻辑删除操作,建议注解标记再首个字段,减少字段遍历
     */
    @ID(type = IdTypeEnum.AUTO)
    @CollectionLogic(close = true)
    private String id;

    private String userName;
    
    private String logic;

}