逻辑删除
逻辑删除并不会真正的从数据库中将数据删除掉,而是将当前被删除的这条数据中的一个逻辑删除字段置为删除状态。比如该数据有一个字段 deleted_flag,当其值为 0 表示未删除,值为 1 表示删除。那么逻辑删除就是将 0 变成 1。
1、实现步骤
- 假设 UserInfo 表中有一个 deleted_flag 字段作为逻辑删除字段:
逻辑删除字段说明:
- 字段支持所有数据类型(推荐使用 Integer、Boolean、LocalDateTime)
- 如果使用 LocalDateTime,建议逻辑未删除值设置为字符串 null,逻辑删除值只支持数据库函数例如 now()
- 然后给对应的实体类字段上加上 @TableLogic 注解:
@Data
public class UserInfo {
private Integer id;
private String userName;
private String passWord;
private Integer age;
@TableLogic
private Integer deletedFlag;
}
2、开始测试
- 我们使用 MyBatis-Plus 自带方法删除一条记录:
userInfoMapper.deleteById(2);
- 查看数据库可以发现这条数据仍然存在,只不过删除字段值被设置为 1:
- 使用 MyBatis-Plus 自带方法查询时是不会查到被逻辑删除的记录(会自动添加过滤条件):
List<UserInfo> users = userInfoMapper.selectList(null);
3、全局配置参数
- 如果项目代码比较规范,所有表的逻辑删除字段使用相同的名称(比如:deleted_flag),我们可以在 application.properties 中添加如下统一的配置,这样对应的实体类字段上就不需要再添加 @TableLogic 注解了:
注意:如果设置了全局逻辑删除字段值,实体类上仍然有 @TableLogic 则以实体上的为准,忽略全局。
#全局逻辑删除字段值
mybatis-plus.global-config.db-config.logic-delete-field=deleted_flag
- 默认情况下,逻辑已删除值为 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