使用删除时间进行软删除的简单实现
最近在做一个 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;
...
}
以上就是本文的全部内容,感谢观看!
文章介绍了如何在Java项目中,利用MybatisPlus框架,通过deleted_at字段实现软删除功能,以解决与唯一约束冲突的问题。方法是创建一个测试表,设置deleted_at为TIMESTAMP类型,并在实体类中使用@TableLogic注解,指定value为null,delval为now(),从而实现新表的时间空值软删除逻辑,同时不影响已有表的原有逻辑。
2162





