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.在配置文件配置逻辑删除

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

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

java 复制代码
@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;
  @Version
  private Integer version;
  @TableLogic
  private Integer deleted;
}

3.修改数据库表,添加一列整型deleted字段并设置默认值为0

4.测试删除和查询方法,会看到删除时将deleted字段变为1,查询时添加条件deleted=0

三、自动填充

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

自动填充步骤

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

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

填充策略:

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

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

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


  /**
   * 更新时填充逻辑
   * @param metaObject
   */
  @Override
  public void updateFill(MetaObject metaObject) {
   }
}

总结

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

  1. 什么是逻辑删除:逻辑删除是指文件或数据没有被真正删除,只是通过对数据进行标注,使其无法被识别到。这种删除操作通常是可逆的,即可以使用适当的工具或软件将删除的文件或数据恢复出来。
  2. 常规逻辑删除:在数据库表中添加一个is_delete字段,值为0表示数据未删除,值为1表示数据已删除。插入数据时,该字段默认为0。删除数据时,将该值设置为1。查询和更新数据时都将is_delete=0作为条件,只查询和更新未删除的数据。
相关推荐
团儿.11 分钟前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
程序猿小D23 分钟前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
权^1 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql
Code成立2 小时前
1、深入理解Redis线程模型
数据库·redis·bootstrap
缘友一世4 小时前
macos安装mongodb
数据库·mongodb·macos
万事大吉CC5 小时前
mysql单表查询·3
数据库·mysql
bin91536 小时前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
Miqiuha6 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐7 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
Java探秘者11 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea