1. 程式人生 > 實用技巧 >MybatisPlus的邏輯刪除功能使用!

MybatisPlus的邏輯刪除功能使用!

目錄

本文程式碼樣例均已上傳至Gitee:https://gitee.com/tqbx/springboot-samples-learn

只對自動注入的sql起效:

  • 插入: 不作限制
  • 查詢: 追加where條件過濾掉已刪除資料,且使用 wrapper.entity 生成的where條件會忽略該欄位
  • 更新: 追加where條件防止更新到已刪除資料,且使用 wrapper.entity 生成的where條件會忽略該欄位
  • 刪除: 轉變為 更新

注:

  • 邏輯刪除是為了方便資料恢復和保護資料本身價值等等的一種方案,但實際就是刪除。

  • 如果你需要頻繁查出來看就不應使用邏輯刪除,而是以一個狀態去表示。

邏輯刪除的配置

  • 步驟一:配置yml,全域性配置,3.3.0版本之後,配置logic-delete-field後可以忽略不配置步驟2。
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 全域性邏輯刪除的實體欄位名(since 3.3.0,配置後可以忽略不配置步驟2)
      logic-delete-value: 1 # 邏輯已刪除值(預設為 1)
      logic-not-delete-value: 0 # 邏輯未刪除值(預設為 0)
  • 步驟二:加上邏輯刪除的註解,區域性配置。
    // 邏輯刪除欄位
    @TableLogic
    private Integer deleted;

邏輯刪除的測試

@Test
void logicDelete(){
    //UPDATE user SET deleted=1 WHERE deleted=0 AND (name = ?)
    boolean remove = userService.remove(
        new QueryWrapper<User>().eq("name", "summer"));
    System.out.println(remove);

}
@Test
void select(){
    //SELECT id,name,deleted FROM user WHERE deleted=0
    List<User> list = userService.list(
        new QueryWrapper<User>().select("id","name","deleted"));
    System.out.println(list);
}
@Test
public void updateById(){
    //UPDATE user SET age=? WHERE id=? AND deleted=0
    User user = new User();
    user.setId(1320008348799713282L);
    user.setAge(20);
    boolean b = userService.updateById(user);
    System.out.println(b);
}

查詢中排除標識欄位

使用註解標識需要排除的欄位:

    @TableField(select = false)
    private Integer deleted;