MyBatisPlus @TableLogic实现全局自动逻辑删除

一、背景

有一天,小王在编写代码时实现了一个删除操作,但由于测试场景覆盖不全,上线后不慎删除了系统中的部分业务数据。幸运的是,系统已经开启了binlog日志功能,使得我们能够根据日志来恢复这些误删的数据。这一事故成为了一个深刻的教训,在部门会议上,我们决定对后续的所有表数据操作采取更加谨慎的措施。大林子提出了一个建议,他认为我们应该默认设置全局自动逻辑删除,以避免物理删除数据的风险。由于我们使用的Mybatis-Plus框架提供了简便的逻辑删除功能,这个建议得到了大家的认可。因此,这个任务自然而然地交给了大林子来负责实施。

二、实现

@TableLogic这个注释是专门为在数据库实体中实现逻辑删除功能而设计的。逻辑删除意味着当您想要"删除"一条记录时,不是从数据库中物理地删除它,而是通过更新该记录中的特定列(通常称为deleted、is_deleted或类似的列)将该记录标记为已删除。

MyBatisPlus支持逻辑删除功能,可以通过设置全局配置或者在实体类上添加注解来实现。一旦启用了逻辑删除功能,MyBatisPlus在执行删除操作时,并不会真正从数据库中物理删除数据,而是通过更新一个标记字段(如del_flag)来表示这条数据已被逻辑删除。

在MyBatisPlus的配置中开启逻辑删除功能,并指定逻辑未删除的值(如del_flag=0)。这样,在使用MyBatisPlus的查询方法时,除非特别指定,逻辑删除的数据会被自动过滤。

java 复制代码
@Data
@EqualsAndHashCode(callSuper false)
@Accessors(chain true)
public class TbTest extends BaseEntity implements Serializable{
	//具体字段省略。。。
}
java 复制代码
@Data
public class BaseEntity{

/**
*删除标志
*/
@TableLogic
private Integer delFlag;

}
相关推荐
BIM云平台开发4 分钟前
【App.vue里跟踪页面跳转和用户ID】
开发语言·前端·javascript
峥嵘life11 分钟前
Andorid 打开热点,关闭有线网,ifconfig卡死分析解决
java·服务器·网络
NiceCloud喜云15 分钟前
ClaudeAPI 接入 n8n / Dify / Open WebUI 实战:Base URL 配置、调用示例与排错
开发语言·ai·chatgpt·aigc
HillVue18 分钟前
Token 叙事退潮,DAA 重新定义 AI 价值标准
java·人工智能·eclipse
行者全栈架构师22 分钟前
【码动四季】Spring Boot 可观测性体系:Micrometer + OpenTelemetry + Grafana 全链路搭建
java·算法·架构
庵中十三居士22 分钟前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python
甄同学33 分钟前
第二十篇:MCP协议集成,Claude Code如何扩展AI Agent的能力边界
开发语言·人工智能·qt
TDengine (老段)40 分钟前
TDengine JOIN 完整语法 — Inner/Outer/ASOF/Window 全语法详解
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
@atweiwei1 小时前
Langchainrust:中LLM-as-a-Judge,用 Rust 实现一套 LLM 评估系统
开发语言·后端·ai·rust·llm·rag
风华圆舞1 小时前
鸿蒙HarmonyOS 多模态输入实战 —— 图片与文档输入智谱/DeepSeek
开发语言·人工智能·华为·php·harmonyos·arkts·arkui