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

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

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

相关推荐
2024-07-14
Apache-fineract
己所不欲,勿施于人——。孔子 今天看到一个项目不错 https://github.com/apache/fineract https://fineract.apache.org/ 这是一个开源的数字金融服务平台,这里可以看演示 https://www.fineract.dev/ Fineract 是一个具有开放 API 的成熟平台,可为金融机构提供可靠、强大且价格实惠的核心银行解决方案,为全球 30 亿银行服务不足和无银行账户的人口提供服务。 如果本自述文件没有回答您要查找的内容,请查看 apache.org 上的 Wiki 上的常见问题解答。访问我们的 JIRA 仪表板以查找要处理的问题、查看其他人正在处理的内容或提出新问题。 立即开始在基于 Web 的在线 IDE GitPod.io 中为该项目做出贡献! (您最初可能必须按 F1 查找命令并运行“Java:启动语言服务器”。)当然也可以使用“传统”本地开发环境进行贡献(见下文)。 社区 如果您有兴趣为这个项目做出贡献,但可能不太知道如何以及从哪里开始,请加入我们的开发人员邮件列表,聆听我们的对话,加入主题,然后向我...
2023-09-23
sms4j对接阿里云短信
迷信、愚昧和虚伪腰缠万贯,但真理一直是一个乞丐。——马丁·路德 开通服务:新手指引_短信服务-阿里云帮助中心 首先安装: 12345<dependency> <groupId>org.dromara.sms4j</groupId> <artifactId>sms4j-spring-boot-starter</artifactId> <version>${sms4j.version}</version></dependency> 然后配置: 12345678910111213141516171819202122232425sms: # 标注从yml读取配置 config-type: yaml is-print: false blends: # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文) aliyun: # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 supplie...
2021-06-29
通过Function获取属性对应字段
只有绝望的赌鬼才肯把全部所有作孤注的一掷。一个商人如果把他的全部财产装在一只船上,人家就管他叫冒失鬼——席勒 我写了个函数 123456789101112131415161718/** * 获取表内字段 * * @param function 字段 * @return java.lang.String * @author <achao1441470436@gmail.com> * @since 2021/6/29 16:51 */public static <R, T> String getColumn(SFunction<T, R> function) { SerializedLambda lambda = LambdaUtils.resolve(function); TableInfo tableInfo = TableInfoHelper.getTableInfo(lambda.getImplClass()); return tableInfo.getFieldList() .para...
2020-09-12
使用反射获取对象属性的坑
要么庸俗,要么孤独——叔本华 前两天遇到一个坑,当时我通过使用getDeclaredFields()函数获取对象属性时发现一个问题: 获取到的属性的顺序不对,结果我自己一看介绍 原来,它是无序的 所以我们为了解决这个问题 首先自定义一个注解用于制定排序规则 1234567891011121314151617181920212223242526package com.ruben.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @ClassName: BeanFieldSort * @Description: * @Date: 2020/9/11 22:18 * * * @author: achao<achao1441470436 @ gmail.com> * @vers...
2021-08-07
屏蔽词过滤器
黑发不知勤学早,白首方恨读书迟。 ——颜真卿 我们可能想使用本地配置词库、过滤器的方式去做全局屏蔽词处理 这里针对三种参数情况 1.requestParam传参:http://localhost:8080/test?keywords=屏蔽词2号 2.requestBody传参:请求体内传json格式的数据,请求头的Content-Type为application/json 3.pathvariable传参:http://localhost:8080/test/屏蔽词3号 这三种应该概括了绝大多数情况下参数传递与接收 代码如下: 首先是过滤器 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394package com.ruben.simplescaffold.filter;im...
2023-12-26
docker运行seata
怀疑一切与信任一切是同样的错误,能得乎其中方为正道。——乔叟 https://hub.docker.com/r/seataio/seata-server 命令: 1docker run --name seata-server -p 8091:8091 -p 7091:7091 seataio/seata-server:latest 自定义配置文件: 123456docker run --name seata-server \ -p 8091:8091 \ -p 7091:7091 \ -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \ -v /PATH/TO/CONFIG_FILE:/root/seata-config \ seataio/seata-server 指定ip 12345docker run --name seata-server \ -p 8091:8091 \ -p 7091:7091 \ ...

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