小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

本文为Mybatis Plus系列文章的第8篇,前7篇接见地址如下:

一、物理删除与逻辑删除

  • 物理删除:指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的,物理删除是计算机处置数据时的一个观点。若是在数据库中直接使用delete、drop删除了表数据,若是没有备份的话,数据就很难恢复了。
  • 逻辑删除(软删除):逻辑删除就是对要被删除的数据打上一个删除符号,通常使用一个deleted字段标示行纪录是不是被删除,好比该数据有一个字段deleted,当其值为0示意未删除,值为1示意删除。那么逻辑删除就是将0酿成1。在逻辑上是数据是被删除的,但数据自己是依然存在的。

两者的优劣:

  • 物理删除一定程度上删除了“无用”的数据,降低了表的数据量,对性能一定是有利益的;然则若是没有备份的话,数据很难恢复。也无法对历史数据举行数据剖析。
  • 逻辑删除恢复的话只要修改ideleted等类似的状态标示字段就可以了,然则表的数据量一定会比物理删除增添了,而且查询时经常要考虑到deleted字段,对索引都市有影响。

以是一张表的数据是否接纳逻辑删除,还要凭据数据的重要性、数据量、查询性能以及营业需求等因素综合判断。

二、逻辑删除实现

  • 首先为需要逻辑删除的表增添一个deleted字段作为逻辑删除字段,而且设置其默认值为0,如下:
CREATE TABLE `user` (
	`id` BIGINT(20) NOT NULL COMMENT '主键ID',
	`name` VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	`age` INT(11) NULL DEFAULT NULL COMMENT '岁数',
	`email` VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	`deleted` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除符号',
	PRIMARY KEY (`id`)
);
  • 给数据库表对应的实体类字段上加上@TableLogic注解:

小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

三、API使用方式

3.1.插入一条数据

插入数据的时刻,不需要为deleted字段赋值

@Test
public void testInsert() {
  User user = new User();
  user.setName("字母哥");
  user.setAge(18);

  int row = userMapper.insert(user);
}

deleted接纳默认值0(未删除),新插入的数据都是未删除的数据

小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

3.2.删除一条纪录:

执行如下Mybatis Plus API删除操作

博客部署设计和构建

userMapper.deleteById(1286797255805796354L);

小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

查看数据库可以发现这条数据仍然存在,只不过逻辑删除字段值被设置为1:

UPDATE user SET deleted=1 WHERE id=? AND deleted=0

3.3.查询一条纪录

  • 当我们使用MP逻辑删除的功效之后,好比执行查询、修改的方式,MP会为我们自动加上未删除的条件。是不会查到被逻辑删除的纪录:
userMapper.selectList(null);

会自动添加过滤条件WHERE deleted=0

SELECT id,name,age,email,deleted
FROM user 
WHERE deleted=0 
  • 当我们查询数据时,查询效果不希望包罗逻辑删除字段,可以加如下的注解
@TableLogic
@TableField(select = false)
private Integer deleted;

执行的SQL如下(注重查询效果不包罗deleted字段):

SELECT id,name,age,email 
FROM user 
WHERE deleted=0

四、全局设置参数

通常在一个对照正规的治理项目中,逻辑删除字段不允许随意命名,所有表的逻辑删除字段使用相同的名称(好比:deleted)。我们可以在application.yml中添加全局设置,这样就不需要在每一个实体类上面都添加 @TableLogic注解了:

注重:当全局设置和@TableLogic局部设置同时存在,则以实体上注解为准,优先级更高。

#全局逻辑删除字段值
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted

默认情况下,逻辑已删除值为1,逻辑未删除值为0。我们也可以在application.yml中举行修改:

#逻辑已删除值(默以为 1)
#逻辑未删除值(默以为 0)
mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

迎接关注我的博客,内里有许多精品合集

  • 本文转载注明出处(必须带毗邻,不能只转文字):字母哥博客

以为对您有辅助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/24787.html