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

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

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

相关推荐
2020-06-07
HashMap
HashMap是由数组和链表组合构成的数据结构。 大概如下,数组里面每个地方都存了Key-Value这样的实例,在Java1.7叫Entry,在Java1.8中叫Node。 因为它本身所有位置都为null,在put插入的时候会根据key的hash去计算一个index值。 就比如我put(”rubenwei”,666),我插入了为”rubenwei”的元素,这个时候我们会通过哈希函数计算出插入的位置,如果计算出来index是2,那就放在第三个位置 但我们知道数组长度是有限的,在有限的长度里面我们使用哈希,哈希本身就存在概率性,就是”rubenwei”和“ruben”我们都去hash有一定的概率计算出来的hashcode是重复的,这时候如果put“ruben”就会在当前entry节点下形成一个链表用于存放hashcode一样的这些元素 每一个节点都会保存自身的hash、key、value以及(next)下个节点 java8之前采用头插法,原有的值顺推到链表中去,新来的值变成链表表头,是因为代码作者认为新来的值会被查找的可能性大一点,为了提升查找的效率设计的 java8之后改用尾插法,...
2020-08-21
Bigdecimal
转载,原文 一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。 二、构造器描述BigDecimal(int) 创建一个具有参数所指定整数值的对象。BigDecimal(double) 创建一个具有参数所指定双精度值的对象。BigDecimal(long) 创建一个具有参数所指定长整数值的对象。BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。 三、方法描述add(BigDecimal) BigDec...
2023-04-24
通过getter获取setter函数
勤劳的家庭,饥饿过其门而不入。——富兰克林 分享一个通过getter获取setter函数 放在:https://gitee.com/dromara/stream-query 1234567891011121314151617181920212223242526/** * 通过getter获取setter * * @param getter getter对应的lambda * @param <T> getter参数类型 * @param <R> property类型 * @return 返回setter对应的lambda */public static <T, R> SerBiCons<T, R> getSetter(SerFunc<T, R> getter) { return getSetter(getter, SerBiCons.class);}/** * 通过getter获取setter * * @param getter getter对应的lambda * @param...
2023-09-17
QLExpress
方向是比速度更重要的追求。——白岩松 QLExpress是一种强大,轻量级,动态的Java平台语言,旨在提高开发人员在不同业务场景中的生产力。 https://github.com/alibaba/QLExpress 安装 12345<dependency> <groupId>com.alibaba</groupId> <artifactId>QLExpress</artifactId> <version>3.3.2</version></dependency> 代码: 12345678ExpressRunner runner = new ExpressRunner();DefaultContext<String, Object> context = new DefaultContext<String, Object>();context.put("a", 1);context.put("b", 2);cont...
2023-04-01
动态mapper日志问题
为学勿忘家世俭,唯金能使子孙愚。——刘克庄 今天发现stream-query的动态mapper,独立配置不生效: 原来是因为logback解析日志对应的类和包时,忽略了内部类的判断 在执行时发现用的Logger对象是MappedStatement里面的,于是就从MappedStatement的创建 找到C:/Users/achao/.m2/repository/org/mybatis/mybatis/3.5.10/mybatis-3.5.10-sources.jar!/org/apache/ibatis/mapping/MappedStatement.java:81里面的 LogFactory.getLog(logId)(logId)此时是我们的动态Mapper 然后找到C:/Users/achao/.m2/repository/ch/qos/logback/logback-classic/1.2.4/logback-classic-1.2.4.jar!/ch/qos/logback/classic/LoggerContext.class:84下面有一段获取分隔符下标然后...
2021-09-08
mybatis-plus使用代码配置configuration
我之所以写作,不是我有才华,而是我有感情。——巴金 12345678910111213141516/** * mybatis-plus自定义配置 * * @return com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer * @author <achao1441470436@gmail.com> * @since 2021/9/8 16:09 */@Beanpublic ConfigurationCustomizer configurationCustomizer() { return configuration -> { // 开启通用枚举支持,默认使用ordinalType configuration.setDefaultEnumTypeHandler(org.apache.ibatis.type.EnumOrdinalTypeHandler.class); // 开启mybatis日志 confi...

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