1. 程式人生 > >mybatis plus之邏輯刪除

mybatis plus之邏輯刪除

MP(mybatis plus)已經大大簡化了我們好多的開發操作,基本的增刪改查都有了,包括程式碼生成等等,今天想說的是它的邏輯刪除功能。我們都在資料庫設計時候經常會有isDel欄位,表示是否刪除,為了留下客戶資料,而只做邏輯刪除,不做物理刪除,但是MP預設的配置是物理刪除,即直接呼叫的資料庫delete操作,但是可以通過配置使呼叫MP的deleteXXX得方法時底層呼叫update操作。(以下以springboot為例)

新增配置

#邏輯刪除配置
mybatis-plus.global-config.sql-injector=com.baomidou.mybatisplus
.mapper.LogicSqlInjector mybatis-plus.global-config.logic-delete-value=1 mybatis-plus.global-config.logic-not-delete-value=0

新增實體類註解

    @TableLogic
    private String isDel;

測試

呼叫者
此處有兩個資料庫操作,一個根據id查詢,一個刪除,期望輸出兩個sql,且第二個刪除呼叫update方法。因為我的是服務間呼叫,如下

  @ResponseBody
    @RequestMapping("get-and-del"
) public ResultModel<Boolean> getAndDel(@RequestParam("id")String id){ SysRole role = roleService.getById(id).getData(); System.out.println("json role --- >"+ FastJsonUtils.toJSONString(role)); return roleService.delById(id); }

被呼叫

   @RequestMapping("get-by-id"
) public ResultModel<SysRole> getById(@RequestParam("id")String id){ return new ResultModel<>(ResultStatus.SUCCESS,roleService.selectById(id)); } @RequestMapping("del-by-id") public ResultModel<Boolean> delById(@RequestParam("id")String id){ return new ResultModel<>(ResultStatus.SUCCESS,roleService.deleteById(id)); }

測試結果

1.png
**確實兩句sql,第二個呼叫了update操作。重點來了,我們看上面一個根據id查詢得方法,最後拼接上了 is_del=’0’.
因為我們配置了邏輯刪除之後,MP自帶的查詢以及Update方法後都會自動加上is_del=’0’判斷。**

執行前後資料庫對比

刪除前.png

刪除後.png