其他分享
首页 > 其他分享> > 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

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

作者:互联网

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

一、物理删除与逻辑删除

两者的优劣:

所以一张表的数据是否采用逻辑删除,还要根据数据的重要性、数据量、查询性能以及业务需求等因素综合判断。

二、逻辑删除实现

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`)
);

mybatisplus-logicdelete

三、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-logicdelete-1

3.2.删除一条记录:

执行如下Mybatis Plus API删除操作

userMapper.deleteById(1286797255805796354L);

mybatisplus-logicdelete-2

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

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

3.3.查询一条记录

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

欢迎关注我的博客,里面有很多精品合集

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

标签:逻辑,MybatisPlus,删除,deleted,小书,精讲,字段
来源: https://www.cnblogs.com/zimug/p/13375459.html