早知今日读书是,悔作从前任侠非。——李欣
今天发现联合唯一索引和逻辑删除冲突了,导致我这边已删除的数据还具有唯一索引的约束
本来一开始是考虑要不要在删除前手动将数据清空一下,但这样感觉并不优雅
然后今天跟朋友探讨了下,决定使用datetime
作为逻辑删除字段的类型,如果未删除,则字段为魔法值的固定时间,已删除,则设为删除时的时间
使用Mybatis-plus
能够优雅实现:
将逻辑删除字段如下配置即可
代码语言:javascript复制/**
* 逻辑删除 已删除为删除时间,未删除为null
*/
@TableLogic(delval = "NOW()", value = "'2001-01-01 00:00:00'")
private LocalDateTime delFlag;
如果不是用注解,也可以配置全局,全局配置的方法我之前写过一篇博客,只要把对应的删除值修改一下即可
然后对应的数据库联合唯一索引,将其关联上
最后效果也是很棒:
可以看到查询自动带上了设置的日期
而我们进行删除时也成功设为NOW()
这里对应的代码实现com.baomidou.mybatisplus.core.metadata.TableInfo#formatLogicDeleteSql