MybatisPlus中的逻辑删除配置

  1. 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
  2. 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

(1)数据库中添加 deleted字段

ALTER TABLE `user` ADD COLUMN `deleted` boolean

(2)实体类添加deleted 字段
并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解
@TableField(fill = FieldFill.INSERT),当添加时,会自动给该属性赋值,具体赋值什么就要看我们在配置类中的配置了,这里默认添加deleted=0
@TableLogic 注解,用于触发我们即将写的拦截器,然后删除时不会对其进行删除,执行的是更新操作,把deleted字段改为了deleted=1,表示已经删除

@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;

(3)元对象处理器接口添加deleted的insert默认值
该拦截器和注解@TableField联合使用,注解会触发此拦截器,从而给deleted属性进行默认赋值

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {
        LOGGER.info("start insert fill ....");
        //this.setFieldValByName("createTime", new Date(), metaObject);
        //this.setFieldValByName("updateTime", new Date(), metaObject);
        //this.setFieldValByName("version", 1, metaObject);
        this.setFieldValByName("deleted", 0, metaObject);
    }
}

(4)application.properties 加入配置
此为默认值,如果你的默认值和mp默认的一样,该配置可无

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

(5)在 MybatisPlusConfig 中注册 Bean
该拦截器和逻辑删除注解@TableLogic联合使用,@TableLogic逻辑删除注解会触发此拦截器,从而对数据进行逻辑删除,即把deleted置为1

@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}

注意:被删除数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作

你可能感兴趣的:(MybatisPlus,数据库,spring,java,mysql,mybatis)