逻辑删除与联合索引冲突处理
发表于|更新于
|浏览量:
早知今日读书是,悔作从前任侠非。——李欣
今天发现联合唯一索引和逻辑删除冲突了,导致我这边已删除的数据还具有唯一索引的约束
本来一开始是考虑要不要在删除前手动将数据清空一下,但这样感觉并不优雅
然后今天跟朋友探讨了下,决定使用datetime作为逻辑删除字段的类型,如果未删除,则字段为魔法值的固定时间,已删除,则设为删除时的时间
使用Mybatis-plus能够优雅实现:
将逻辑删除字段如下配置即可
1 | /** |
如果不是用注解,也可以配置全局,全局配置的方法我之前写过一篇博客,只要把对应的删除值修改一下即可
然后对应的数据库联合唯一索引,将其关联上
最后效果也是很棒:

可以看到查询自动带上了设置的日期
而我们进行删除时也成功设为NOW()

这里对应的代码实现com.baomidou.mybatisplus.core.metadata.TableInfo#formatLogicDeleteSql

相关推荐
2025-12-25
conductor
今天所做之事勿候明天,自己所做之事勿候他人。——歌德 Conductor:源自 Netflix 的可扩展工作流编排引擎当你的系统从“一个应用”演进为“几十上百个微服务 + 一堆事件”,你就会需要一个可靠、可观察、可伸缩的编排引擎,把这些复杂的流程组织起来。Conductor 正是为此而生——它最初由 Netflix 构建,用于管理分布式、异步的微服务与事件驱动工作流;如今由 Orkes 团队在社区中持续维护与发展。 仓库主页:conductor-oss/conductor 官方站点:Conductor OSS README 永久链接(信息来源):README.md@aa7de92 默认分支:main 项目描述(仓库 Description):“Conductor is an event driven orchestration platform providing durable and highly resilient execution engine for your applications” 许可协议:Apache 2.0 进一步了解 Netflix ...
2020-12-21
@Scheduled的使用
人之患在好为人师。——《孟子》 今天朋友问我定时任务怎么创建,让我们一起重温复习一下吧~ 首先需要在启动类上加@EnableScheduling注解(组件上也可以加) 然后在需要定时的方法上加上@Scheduled注解 1234567891011121314151617181920212223242526package com.ruben.task;import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;/** * @ClassName: LogTask * @Description: 我还没有写描述 * @Date: 2020/12/21 0021 20:11 * * * @author: <achao1441470436@gmail.com> * @version: 1.0 * @since: JDK 1.8 */@Slf4j@Comp...
2021-01-12
Zero date value prohibited
世界上最大的谎言就是你不行。——《垫底辣妹》 报Zero date value prohibited错的时候 在连接mysql的URL上加入&zeroDateTimeBehavior=convertToNull即可 原因是因为我们存入数据库中的date类型字段有为0的数据 加了此参数,即可让mysql处理的时候,把为0的日期当作null处理
2021-03-14
fastJson的JSONField注解
真正的快乐是内在的,它只有在人类的心灵里才能发现。——布雷默 相信关于FastJson大伙都不陌生 今天聊聊fastjson的这个注解@JSONField 首先它可以放到方法上 例如我们pojo的getter和setter等 其次用的最多的是放到属性上 例如我这里新建一个POJO 12345678910111213@Data@Builder@NoArgsConstructor@AllArgsConstructorprivate static class Student implements Serializable { private static final long serialVersionUID = -3289647584974663707L; private String name; private Integer age; private String job; private GenderEnum gender; private Date birthday; private String json;}...
2023-09-29
多模块spring注入处理
踏破铁鞋无觅处,得来全不费功夫。——施耐庵 今天在搭建多模块项目时发现一个问题,其中一个公共依赖里需要注入的bean,注入不到字模块spring容器里去 最后在resources/META-INF/spring下面新建了org.springframework.boot.autoconfigure.AutoConfiguration.imports 内容为 12com.xxx.GlobalExceptionHandlercom.xxx.GlobalRestResultHandler 手动指定要注入的bean搞定了 见:2.7版本spring.factories弃用 | 阿超
2024-09-07
springboot单向推送给客户端SseEmitter
教育人就是要培养他对自己有更严格的要求。——苏霍姆林斯基 SseEmitter 是 Spring Framework 提供的一个类,用于处理服务器向客户端推送事件(Server-Sent Events, SSE)的功能。与 WebSocket 不同,SSE 是单向的,服务器可以推送数据到客户端,但客户端不能推送数据到服务器。SSE 适用于场景包括实时消息通知、进度更新、数据流推送等。Spring Boot 中通过 SseEmitter 实现 SSE 通信简单且高效。 Spring Boot 中的 SseEmitter 提供了一种轻量级的方式来向前端推送实时数据,它通过标准的 HTTP 协议工作,兼容性广泛且易于使用。 SseEmitter 的主要特点: 轻量级:基于 HTTP 协议,兼容性好,不需要复杂的配置。 单向推送:服务器向客户端推送数据,适合需要实时更新的场景。 长连接:通过持续连接,避免频繁的轮询操作。 官方文档、GitHub地址 官方文档:Spring SseEmitter Documentation GitHub 仓库:Spring Framework...

阿超
我的名字叫阿超 年龄25岁 家在北京市 职业是软件开发 每天最晚也会在八点前回家 不抽烟 酒浅尝辄止 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟俯卧撑暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 健康检查结果也显示我很正常 我想说明我是一个不论何时都追求内心平稳的人 不拘泥于胜负 不纠结于烦恼 不树立使我夜不能寐的敌人 这就是我在这社会的生活态度
Follow Me公告
This is my Blog