1. 程式人生 > 程式設計 >MybatisPlus實現邏輯刪除功能

MybatisPlus實現邏輯刪除功能

邏輯刪除

你有沒有見過某些網站進行一些刪除操作之後,你看不到記錄了但是管理員卻能夠檢視到。這裡就運用到了邏輯刪除。

什麼是邏輯刪除?

邏輯刪除的本質是修改操作,所謂的邏輯刪除其實並不是真正的刪除,而是在表中將對應的是否刪除標識(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 邏輯刪除內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!