mybatis plus之邏輯刪除
阿新 • • 發佈:2019-01-02
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));
}
測試結果
**確實兩句sql,第二個呼叫了update操作。重點來了,我們看上面一個根據id查詢得方法,最後拼接上了 is_del=’0’.
因為我們配置了邏輯刪除之後,MP自帶的查詢以及Update方法後都會自動加上is_del=’0’判斷。**