【Mybatis Plus】使用删除时间进行软删除的简单实现

文章介绍了如何在Java项目中,利用MybatisPlus框架,通过deleted_at字段实现软删除功能,以解决与唯一约束冲突的问题。方法是创建一个测试表,设置deleted_at为TIMESTAMP类型,并在实体类中使用@TableLogic注解,指定value为null,delval为now(),从而实现新表的时间空值软删除逻辑,同时不影响已有表的原有逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用删除时间进行软删除的简单实现

最近在做一个 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;

    ...
}

以上就是本文的全部内容,感谢观看!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值