mybatis-plus實現邏輯刪除的示例代碼
一、什么是邏輯刪除?
邏輯刪除的本質是修改操作,并不是真正的刪除,而是在表中將對應的是否刪除標識(del_flag)做修改操作。比如0是未刪除,1是刪除。在邏輯上數據是被刪除的,但數據本身依然存在庫中。
邏輯刪除sql語句為:
update user set del_flag=1 where id = 1 and del_flag=0
這種設計,后端每次向數據庫查詢數據時,只查del_flag=0(未刪除)的數據。拿上面sql舉例,那么客戶端進行查詢id為1的信息,服務器就不會提供信息。
查詢sql為:
select id,name,del_flag from user where del_flag=0
二、為什么使用邏輯刪除?
- 方便數據恢復,保護數據本身的價值。
- 保證數據連續(xù)性,對主鍵的影響可能會導致底層B+樹重建,而 delete 和 update id 都會影響主鍵。
事實上,在大多數公司里,都會采用邏輯刪除的方式,因為數據的價值更大,被刪除的數據也非常有記錄價值,這樣的操作也并不會提高太多的操作難度。
三、在springboot使用Mybatis-Plus提供的邏輯刪除
字段類型支持說明:支持所有數據類型(推薦使用 Integer,Boolean,LocalDateTime)
如果數據庫字段使用datetime,邏輯未刪除值和已刪除值支持配置為字符串null,另一個值支持配置為函數來獲取值如now()
3.1、在application.yml配置
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)3.2、實體類字段上加上@TableLogic注解
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
/**
* 用戶訂單
*
* @author yunyan
*/
@TableName("t_user")
@Data
public class UserPO implements Serializable {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 用戶名
*/
private String userName;
/**
* 密碼
*/
private String password;
/**
* 昵稱
*/
private String nickName;
/**
* 刪除標識
*/
@TableLogic
private Integer delFlag;3.3、演示

3.4、UserMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.testinterface.entity.po.UserPO;
import org.apache.ibatis.annotations.Mapper;
/**
* 用戶映射器
*
* @author yunyan
*/
@Mapper
public interface UserMapper extends BaseMapper<UserPO> {
}3.5、IUserService
/**
* 用戶服務
*
* @author yunyan
*/
public interface IUserService extends IService<UserPO> {
}3.6、UserServiceImpl
/**
* 用戶服務impl
*
* @author yunyan
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements IUserService {
}
3.7、controller
@RequestMapping("/open/del")
public ResultUtil del(UserParam userParam){
UserPO one = userService.getOne(new LambdaQueryWrapper<UserPO>()
.eq(UserPO::getUserName, userParam.getUserName()));
boolean b = userService.removeById(one);
System.out.println(b);
return ResultUtil.success(b);
}3.8、ResultUtil
@Data
public class ResultUtil {
private String code;
private String message;
private Object data;
public static ResultUtil success(Object data){
ResultUtil resultUtil = new ResultUtil();
resultUtil.setCode("200");
resultUtil.setMessage("請求成功");
resultUtil.setData(data);
return resultUtil;
}
}3.9、瀏覽器請求

3.10、數據庫的數據
可以看到,加了@TableLogic注解的字段對應的數據庫字段,由0(未刪除)改為1(已刪除)

到此這篇關于mybatis-plus實現邏輯刪除的示例代碼的文章就介紹到這了,更多相關mybatis-plus 邏輯刪除內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?MCP?實戰(zhàn)之如何構建跨進程與遠程的工具服務
MCP協(xié)議由Anthropic推出,支持stdio/SSE/Streaming通訊,提供工具、提示、資源原語,適用于AI與外部服務集成,兼容Java及多框架,具備鑒權、斷線重連等生產特性,助力構建分布式系統(tǒng),本文給大家介紹Java MCP實戰(zhàn)之如何構建跨進程與遠程的工具服務,感興趣的朋友一起看看吧2025-07-07
Mybatis-Plus開發(fā)提速器mybatis-plus-generator-ui詳解
這篇文章主要介紹了Mybatis-Plus開發(fā)提速器mybatis-plus-generator-ui,本文簡要介紹一款基于Mybatis-Plus的代碼自助生成器,文章通過實例集成的方式來詳細講解mybatis-plus-generator-ui,從相關概念到實際集成案例,以及具體的擴展開發(fā)介紹,需要的朋友可以參考下2022-11-11
詳解SpringBoot開發(fā)案例之整合定時任務(Scheduled)
本篇文章主要介紹了詳解SpringBoot開發(fā)案例之整合定時任務(Scheduled),具有一定的參考價值,有興趣的可以了解一下2017-07-07
Java中的BaseTypeHandler自定義類型轉換器的使用
這篇文章主要介紹了Java中的BaseTypeHandler自定義類型轉換器的使用,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
Java后端開發(fā)中Service層依賴注入的最佳實踐
文章主要探討了在Java后端開發(fā)中,Service層依賴注入Mapper還是其他Service的問題,通過分析三層架構的職責劃分,文章指出了在不同場景下選擇合適的注入方式,需要的朋友可以參考下2026-01-01
SpringBoot核心@SpringBootApplication使用介紹
這篇文章主要介紹了SpringBoot核心@SpringBootApplication的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

