使用删除时间进行软删除的简单实现
最近在做一个 Java 的项目,这个项目使用了 Mybatis Plus 来进行数据库操作,Mybatis Plus 的软删除默认使用 0,1 来进行标识。由此造成了用户表中软删除和电话号码的唯一约束不能共存的问题,具体可以见这篇博客。简而言之,我需要使用删除时间是否为空来进行软删除。
在百度上查阅了一些资料,很少有人有这个需求,有一些博客写的方法也不太可行,官方代码库的 issues 里的一些介绍也还是没有很好的讲清楚方法,在看了几篇博客 + 官方文档 + 尝试了一番后,找到了简单的解决方案。
由于我们的项目已经在线上运行了,所以希望以前的表继续使用原来的软删除逻辑,新表使用时间是否为空进行软删除。
具体演示
首先创一个表,用 deleted_at 来标识删除与否
-- 测试表建表函数
-- 表结构
CREATE TABLE test
(
`id` BIGINT NOT NULL AUTO_INCREMENT,
`remark` TEXT COMMENT '备注',
`deleted_at` TIMESTAMP NULL DEFAULT NULL COMMENT '删除标志位,NULL-未删除,时间-已删除',
PRIMARY KEY (`id`) USING BTREE
) CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT '测试表';
然后创建实体类,在 @TableLogic
后面再加一个 (value = "null", delval = "now()")
。这样就 ok 啦,这样修改只有这张表会使用这个逻辑来进行软删除,别的表依旧沿用别的软删除逻辑(前提:不是使用修改配置文件,全局定义软删除方式)
// 实体类
@TableName(value ="test")
@Data
public class Test implements Serializable {
...
/**
* 删除标志位
*/
@TableLogic(value = "null", delval = "now()")
@JsonIgnore
private Date deletedAt;
...
}
以上就是本文的全部内容,感谢观看!