Mybatis-Plus邏輯刪除的用法詳解
簡介
說明
本文介紹Mybatis-Plus的邏輯刪除的用法。
刪除功能是項(xiàng)目中經(jīng)常見到的需求。比如:需要?jiǎng)h除一個(gè)訂單,一般不會(huì)把實(shí)際數(shù)據(jù)刪除,而是邏輯刪除。一般表中有一個(gè)is_deleted字段標(biāo)識該用戶是否被刪除,0 表示未刪除 1 表示已刪除。
配置(非必須)
配置刪除未刪除的狀態(tài)碼
配置未刪除、已刪除分別標(biāo)識的狀態(tài)碼是什么,這里采用的yml格式。
mybatis-plus:
global-config:
db-config:
# 1 代表已刪除。默認(rèn)是1。也可寫為字段名,如:id,這樣刪除時(shí)會(huì)將id的值寫到邏輯刪除字段
logic-delete-value: 1
# 0 代表未刪除。默認(rèn)是0
logic-not-delete-value: 0全局配置字段名(可不配置)
若項(xiàng)目代碼比較規(guī)范,所有表的邏輯刪除字段使用相同的名稱(比如:deleted_flag),我們可以在 application.properties 中添加如下統(tǒng)一的配置,這樣對應(yīng)的實(shí)體類字段上就不需要再添加 @TableLogic 注解了:
注意:如果設(shè)置了全局邏輯刪除字段值,實(shí)體類上仍然有 @TableLogic 則以實(shí)體上的為準(zhǔn),忽略全局。
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted_flagentity
實(shí)體類對應(yīng)的字段上加上注解@TableLogic
@Data
@TableName("t_user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableLogic
private String deleted;
}數(shù)據(jù)庫
數(shù)據(jù)庫deleted列,設(shè)置為tinyint類型,長度為1
測試
插入測試
插入時(shí),sql語句不會(huì)涉及邏輯刪除的字段。
查詢、修改測試
使用MP邏輯刪除的功能之后,執(zhí)行查詢、修改的方法,MP會(huì)為我們自動(dòng)加上未刪除的條件。自定義sql除外
@Test
public void select(){
List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery().eq(User::getAge, 18));
users.forEach(System.out::println);
}
@Test
public void update(){
User user = new User();
user.setEmail("Test@email.com");
int update = userMapper.update(user, Wrappers.<User>lambdaQuery().eq(User::getAge, 18));
System.out.println(update);
}DEBUG==> Preparing: SELECT id,login_name,name,password,email,salt,sex,age,phone,user_type,status,organization_id,create_time,is_delete FROM sys_user WHERE deleted='0' AND age = ? DEBUG==> Parameters: 18(Integer) DEBUG<== Total: 0 DEBUG==> Preparing: UPDATE sys_user SET email=? WHERE deleted='0' AND age = ? DEBUG==> Parameters: Test@email.com(String), 18(Integer) DEBUG<== Updates: 0
刪除測試
(執(zhí)行的SQL語句是UPDATE)
@Test
public void delete() {
int i = userMapper.deleteById(1);
System.out.println(i);
}DEBUG==> Preparing: UPDATE sys_user SET is_delete='1' WHERE id=? AND deleted='0' DEBUG==> Parameters: 1(Integer) DEBUG<== Updates: 1
不查詢is_deleted字段
@TableField(select = false)即可。還可使用Wrapper的select表達(dá)式來排除某些查詢字段,只是通過注解的方式更方便。
@TableLogic
@TableField(select = false)
private String deleted;到此這篇關(guān)于Mybatis-Plus邏輯刪除的用法詳解的文章就介紹到這了,更多相關(guān)Mybatis-Plus邏輯刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MyBatis-Plus邏輯刪除實(shí)現(xiàn)過程
- MyBatis-Plus中的邏輯刪除功能及實(shí)例分析
- mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
- mybatis-plus邏輯刪除與唯一約束沖突問題
- MyBatis-Plus實(shí)現(xiàn)邏輯刪除功能解析
- mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
- MyBatis-Plus中的邏輯刪除使用詳解
- MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn)
- mybatis-plus 如何配置邏輯刪除
- MyBatis-Plus 邏輯刪除的實(shí)現(xiàn)示例
相關(guān)文章
SpringBoot 整合 JMSTemplate的示例代碼
這篇文章主要介紹了SpringBoot 整合 JMSTemplate的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
基于SpringBoot+Redis+Lua 實(shí)現(xiàn)高并發(fā)秒殺系統(tǒng)
這篇文章主要介紹了基于SpringBoot+Redis+Lua 實(shí)現(xiàn)高并發(fā)秒殺系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-01-01
關(guān)于maven install報(bào)錯(cuò)原因揭秘:parent.relativePath指向錯(cuò)誤的本地POM文件
在使用Maven進(jìn)行項(xiàng)目構(gòu)建時(shí),如果遇到'parent.relativePath'指向錯(cuò)誤的本地POM文件的問題,可能會(huì)導(dǎo)致構(gòu)建失敗,這通常是由于父項(xiàng)目POM文件的相對路徑設(shè)置錯(cuò)誤、本地POM文件與父項(xiàng)目POM文件版本或內(nèi)容不一致所致,解決方法包括檢查并修正父項(xiàng)目POM文件中的相對路徑設(shè)置2024-09-09
SpringBoot啟動(dòng)性能優(yōu)化的實(shí)戰(zhàn)指南
這篇文章將結(jié)合生產(chǎn)環(huán)境場景,從原理層面,源碼解讀和實(shí)戰(zhàn)示例出發(fā),全面剖析 Spring Boot 啟動(dòng)性能瓶頸,并給出可落地的優(yōu)化建議與最佳實(shí)踐2025-06-06

