前言
在开发系统实现功能时,有时我们希望删除的操作是实现逻辑删除,所谓逻辑删除就是将数据标记为删除,而并非真正的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到。这样做的目的就是避免数据被真正的删除。
mp为我们提供了这样的功能
官方文档:Mybatis-plus实现逻辑删除
1.为user表添加字段
#添加逻辑删除字段名
ALTER TABLE `tb_user`
ADD COLUMN `deleted` INT(1) NULL DEFAULT 0 COMMENT '1代表删除,0代表未删除' AFTER
`version`;
2.在实体类的属性上添加@TableLogic注解
@TableLogic //逻辑删除的字段,1表示删除,0表示未删除
private Integer deleted;
这里可以自定义规则,如果不自定义规则,就会默认读取配置文件中的全局配置,即删除状态为1,未删除状态为0。点进@TableLogic源码如下:
package com.baomidou.mybatisplus.annotation;
import java.lang.annotation.*;
/**
* 表字段逻辑处理注解(逻辑删除)
*
* @author hubin
* @since 2017-09-09
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableLogic {
/**
* 默认逻辑未删除值(该值可无、会自动获取全局配置)
*/
String value() default "";
/**
* 默认逻辑删除值(该值可无、会自动获取全局配置)
*/
String delval() default "";
}
3.配置文件application.properties进行配置
#删除状态为1
mybatis-plus.global-config.db-config.logic-delete-value=1
#未删除状态为0
mybatis-plus.global-config.db-config.logic-not-delete-value=0
这样我们就配置好了,在使用的时候deleteById就会变成update语句,
我们可以在配置文件中设置logging.level日志等级为debug,打印sql语句:
@Test
public void testDeleteById(){
this.userMapper.deleteById(2L);
}
[main] [cn.itcast.mp.mapper.UserMapper.deleteById]-[DEBUG] ==> Preparing: UPDATE
tb_user SET deleted=1 WHERE id=? AND deleted=0
[main] [cn.itcast.mp.mapper.UserMapper.deleteById]-[DEBUG] ==> Parameters: 2(Long)
[main] [cn.itcast.mp.mapper.UserMapper.deleteById]-[DEBUG] <== Updates: 1