怎么在MybatisPlus中实现一个逻辑删除功能
创始人
2024-12-27 09:03:31
0次

逻辑删除

你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。

什么是逻辑删除?

逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(deleted)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。
对应的SQL语句:

update user set deleted=1 where id =1 and deleted=0

update 表名 set deleted = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 deleted 更改为 0 。
查找的话呢是通过加上条件deleted=0

select * from user where deleted=0

来自官网的配置,这里直接复制

第一步 添加全局配置

mybatis-plus:
 global-config:
  db-config:
   logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
   logic-delete-value: 1 # 逻辑已删除值(默认为 1)
   logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

第二步、在实体类上添加@TableLogic注解

@TableLogic
private Integer deleted;//对应的实体字段,实体字段需要根据数据库字段命名

这样就会在预编译sql中自动给这个字段设置的值就是全局配置设置的值

当然也可以设置局部生效 单个实体生效(不推荐)只需要在注解中添加

完整的实体示例

import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {

 private long id;
 private String name;
 private long age;
 private String email;
 private long managerId;
 private LocalDateTime createTime;
 private LocalDateTime updateTime;
 private long version;
 
 @TableLogic(value = "0",delval = "1") //value表示逻辑未删除值,delval表示逻辑删除设置的值
 private long deleted;
 
}

当然不建议这样操作,一般直接@TableLogic然后通过全局设置即可

测试代码,其中的传入的是主键 刘红雨的id

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.huashengshu.demo.dao.UserMapper;

@SpringBootTest
@RunWith(SpringRunner.class)
class DemoApplicationTest {

  @Autowired
  UserMapper userMapper;

  @Test
  public void deleteTest(){
    int rows = userMapper.deleteById(1094592041087729666L);
    System.out.println("影响行数:"+rows);
  }

}

执行结果:

怎么在MybatisPlus中实现一个逻辑删除功能

查看表中数据:

怎么在MybatisPlus中实现一个逻辑删除功能

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...