当前位置: 首页 > news >正文

MyBatisPlus之逻辑删除

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
MyBatisPlus之逻辑删除


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、什么是逻辑删除
  • 二、逻辑删除的使用
  • 三、自动填充
    • 自动填充步骤
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在学习MyBatisPlus的过程中,逻辑删除是一个比较重要的知识点。逻辑删除是指使用一个特殊的字段来表示数据库表中的一条记录是否被删除了(或是否存在),例如为数据库表中的每一条记录都增加一个is_delete字段,当is_delete为1时,表示该记录已经被删除了,当is_delete为0时,表示该记录还有效。与逻辑删除相对的就是物理删除,指直接从数据库中删除记录。

逻辑删除是为了方便数据恢复和保护数据本身价值等的一种方案,但实际就是删除。如果需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。

希望通过本文的介绍,大家对MyBatisPlus的逻辑删除有一个初步的了解。后续会详细介绍逻辑删除的实现在此基础上。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是逻辑删除

逻辑删除是一种用于表示数据删除状态的数据处理方式。在逻辑删除中,数据并没有从数据库中真正被删除,而是通过标记或更新一个字段来表示该数据已被删除。

常见的实现方式是在数据库表中添加一个名为is_deleted的字段,并将其设置为1或true来表示数据已被删除,设置为0或false来表示数据未被删除。这样,在查询数据时,可以通过添加条件来过滤出已被删除的数据。此时增删改查的Sql语句发生变化:

  • 插入: 不作限制
  • 查找: 追加where条件过滤掉已删除数据。例如 select id,name,deleted from user where deleted=0
  • 更新: 追加where条件防止更新到已删除数据。
  • 删除: 转变为更新,例如 update user set deleted=1 where id = 1 and deleted=0

逻辑删除的好处是可以保留数据的历史记录,以便在需要时进行恢复或审计。同时,它还可以避免由于误操作或数据完整性问题导致的数据丢失。

需要注意的是,逻辑删除只是一种数据处理方式,并不代表数据真正被删除。在实际应用中,需要根据具体情况选择合适的数据处理方式,并确保数据的安全性和完整性。

二、逻辑删除的使用

1.在配置文件配置逻辑删除

# mybatis-plus相关配置
mybatis-plus:# 全局配置global-config:db-config:# 全局逻辑删除的字段名logic-delete-field: deleted# 逻辑已删除值(默认为 1)logic-delete-value: 1# 逻辑未删除值(默认为 0)logic-not-delete-value: 0

2.修改实体类,添加逻辑删除属性

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student extends Model<Student> {@TableId(value = "sid")private Integer id;@TableField("sname")private String name;private String email;private String gender;private Integer age;@Versionprivate Integer version;@TableLogicprivate Integer deleted;
}

3.修改数据库表,添加一列整型deleted字段并设置默认值为0
4.测试删除和查询方法,会看到删除时将deleted字段变为1,查询时添加条件deleted=0

三、自动填充

因为存在逻辑删除字段,所以在向数据库插入数据时,都需要将deleted字段的值设置为 0。每次插入数据都要设置这个值,非常繁琐。因此,MyBatis-Plus 提供了自动填充功能来解决这个问题。

自动填充步骤

1.为实体类的自动填充字段添加@TableField

@TableLogic
// 自动填充字段
@TableField(fill = FieldFill.INSERT)
private Integer deleted;

填充策略:

  • DEFAULT:默认不处理
  • INSERT:插入操作填充字段
  • UPDATE:更新操作填充字段
  • INSERT_UPDATE:插入操作和更新操作均填充字段

2.自定义填充类实现MetaObjectHandler接口

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 插入时填充逻辑* @param metaObject 元对象*/@Overridepublic void insertFill(MetaObject metaObject) {/*** 参数1:填充字段名* 参数2:参数值* 参数3:元对象*/this.setFieldValByName("deleted", 0, metaObject);}/*** 更新时填充逻辑* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {}
}

总结

提示:这里对文章进行总结:

  1. 什么是逻辑删除:逻辑删除是指文件或数据没有被真正删除,只是通过对数据进行标注,使其无法被识别到。这种删除操作通常是可逆的,即可以使用适当的工具或软件将删除的文件或数据恢复出来。
  2. 常规逻辑删除:在数据库表中添加一个is_delete字段,值为0表示数据未删除,值为1表示数据已删除。插入数据时,该字段默认为0。删除数据时,将该值设置为1。查询和更新数据时都将is_delete=0作为条件,只查询和更新未删除的数据。
http://www.lryc.cn/news/270475.html

相关文章:

  • 在macOS中搭建.NET MAUI开发环境
  • [NCTF 2022]calc
  • 【pandas_不重复项计数】
  • 菜鸟学习vue3笔记-vue hooks初体验
  • 81 使用DFS和BFS解机器人的运动范围
  • vue-springboot基于JavaWeb的家装一体化商城平台guptn
  • .NET进阶篇06-async异步、thread多线程2
  • java 方法
  • HarmonyOS 组件通用属性之通用事件 文档参数讲解(点击事件)
  • 毕业设计之开题报告
  • 【数据结构】详细剖析线性表
  • 通过数字证书对PDF电子文件进行数字签名/盖章
  • 2007~2016 年税调经纬度及其所处的省市区县乡镇数据
  • SLAM学习入门--编程语言
  • Go语言程序设计-第6章--方法
  • AI按理说应该最擅长理工,为啥先冲击文艺行业?
  • 蓝牙物联网移动硬件数据传输系统解决方案
  • Linux下Web服务器工作模型及Nginx工作原理详解
  • AJAX: 整理2:学习原生的AJAX,这边借助express框架
  • 二、计算机软件及其使用-文字处理软件 Word 2016
  • Linux LVM逻辑卷
  • Hive生产调优介绍
  • 如何理解鼠标点击事件在程序中的处理
  • 基于JWT的用户token验证
  • 通过 conda 安装 的 detectron2
  • 嵌入式开发——SPI OLED屏幕案例
  • ibm上电时序(视频内容)
  • 如何在Vue.js中使用$emit进行组件通信
  • SPSS相关统计学知识精要回顾-大家都来做做
  • React Native 从类组件到函数组件