当前位置: > > > SpringBoot - MyBatis-Plus使用详解14(逻辑删除)

SpringBoot - MyBatis-Plus使用详解14(逻辑删除)

十四、逻辑删除

1,什么是逻辑删除?

    逻辑删除并不会真正的从数据库中将数据删除掉,而是将当前被删除的这条数据中的一个逻辑删除字段置为删除状态。比如该数据有一个字段 deleted_flag,当其值为 0 表示未删除,值为 1 表示删除。那么逻辑删除就是将 0 变成 1

2,实现步骤

(1)假设 UserInfo 表中有一个 deleted_flag 字段作为逻辑删除字段:
逻辑删除字段说明:
  • 字段支持所有数据类型(推荐使用 IntegerBooleanLocalDateTime
  • 如果使用 LocalDateTime,建议逻辑未删除值设置为字符串 null,逻辑删除值只支持数据库函数例如 now()

(2)然后给对应的实体类字段上加上 @TableLogic 注解:
@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String passWord;
    private Integer age;
    @TableLogic
    private Integer deletedFlag;
}

3,开始测试 

(1)我们使用 MyBatis-Plus 自带方法删除一条记录:
userInfoMapper.deleteById(2);

(2)查看数据库可以发现这条数据仍然存在,只不过删除字段值被设置为 1

(3)使用 MyBatis-Plus 自带方法查询时是不会查到被逻辑删除的记录(会自动添加过滤条件):
List<UserInfo> users = userInfoMapper.selectList(null);

附:全局配置参数

(1)如果项目代码比较规范,所有表的逻辑删除字段使用相同的名称(比如:deleted_flag),我们可以在 application.properties 中添加如下统一的配置,这样对应的实体类字段上就不需要再添加 @TableLogic 注解了:
注意:如果设置了全局逻辑删除字段值,实体类上仍然有 @TableLogic 则以实体上的为准,忽略全局。
#全局逻辑删除字段值
mybatis-plus.global-config.db-config.logic-delete-field=deleted_flag

(2)默认情况下,逻辑已删除值为 1,逻辑未删除值为 0。我们也可以在 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
评论0