mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
什么是邏輯刪除?
邏輯刪除的本質(zhì)是修改操作,并不是真正的刪除,而是在表中將對應(yīng)的是否刪除標(biāo)識(delete_flag)做修改操作。比如0是未刪除,1是刪除。在邏輯上數(shù)據(jù)是被刪除的,但數(shù)據(jù)本身依然存在庫中。
邏輯刪除sql語句為:
update user set deleted=1 where id = 1 and deleted=0
這種設(shè)計,后端每次向數(shù)據(jù)庫查詢數(shù)據(jù)時,只查deleted=0(未刪除)的數(shù)據(jù)。拿上面sql舉例,那么客戶端進(jìn)行查詢id為1的信息,服務(wù)器就不會提供信息。
查詢sql為:
select id,name,deleted from user where deleted=0
為什么用到邏輯刪除?
比如:在一家銷售公司中,有兩個員工在一月份離職了,后臺管理人員在辦離職時,如果直接將數(shù)據(jù)庫中與這兩個員工相關(guān)的信息刪除了,那么當(dāng)經(jīng)理想要看一月份的銷售記錄的時候,只能看到部分銷售記錄,銷售金額對不上。這種情況肯定是不允許發(fā)生的
如下圖:
本來一月總共銷售了17,000,00元,結(jié)果刪除后只剩下了5,000,00。

只需要在員工工號后面加delete_flag字段,用于標(biāo)記是否被刪除即可。
在springboot使用Mybatis-Plus提供的邏輯刪除
字段類型支持說明:
支持所有數(shù)據(jù)類型(推薦使用 Integer,Boolean,LocalDateTime)
如果數(shù)據(jù)庫字段使用datetime,邏輯未刪除值和已刪除值支持配置為字符串null,另一個值支持配置為函數(shù)來獲取值如now()
1、在application.yml配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局邏輯刪除的實(shí)體字段名(since 3.3.0,配置后可以忽略不配置步驟2)
logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)
logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)2、 實(shí)體類字段上加上@TableLogic注解
@Data
public class UserPO implements Serializable {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String userName;
private String password;
private String nickName;
@TableLogic
private int delFlag;
}演示
數(shù)據(jù)庫t_user表中數(shù)據(jù):

UserPOMapper:
@Mapper
public interface UserPOMapper extends BaseMapper<UserPO> {
}IUserService:
public interface IUserService extends IService<UserPO> {
}IUserServiceImpl:
@Service
public class IUserServiceImpl extends ServiceImpl<UserPOMapper, UserPO> implements IUserService {
}Controller:
@RequestMapping("/open/del")
public ResultUtil del(UserParam userParam){
UserPO one = iUserService.getOne(new LambdaQueryWrapper<UserPO>()
.eq(UserPO::getUserName, userParam.getUserName()));
boolean b = iUserService.removeById(one);
System.out.println(b);
return ResultUtil.success(b);
}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;
}
}瀏覽器請求:

數(shù)據(jù)庫t_user表中數(shù)據(jù):
可以看到,加了@TableLogic注解的字段對應(yīng)的數(shù)據(jù)庫字段,由0(未刪除)改為1(已刪除)

到此這篇關(guān)于mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼的文章就介紹到這了,更多相關(guān)mybatis-plus 邏輯刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java加密 消息摘要算法MAC實(shí)現(xiàn)詳解
這篇文章主要介紹了Java 消息摘要算法MAC實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
Java反射中java.beans包學(xué)習(xí)總結(jié)
本篇文章通過學(xué)習(xí)Java反射中java.beans包,吧知識點(diǎn)做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對此有需要的朋友可以學(xué)習(xí)參考下。2018-02-02
在Spring-Boot中如何使用@Value注解注入集合類
這篇文章主要介紹了在Spring-Boot中如何使用@Value注解注入集合類的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
JVM有哪些組成部分示例詳解(面試必問的Java運(yùn)行時架構(gòu))
JVM是Java應(yīng)用程序運(yùn)行的核心環(huán)境,因此在Java相關(guān)的面試中,JVM相關(guān)的知識是經(jīng)常被考察的重點(diǎn),下面這篇文章主要介紹了JVM有哪些組成部分,文中通過代碼介紹介紹的非常詳細(xì),需要的朋友可以參考下2026-05-05

