Mybatis-Plus邏輯刪除的用法詳解
簡(jiǎn)介
說(shuō)明
本文介紹Mybatis-Plus的邏輯刪除的用法。
刪除功能是項(xiàng)目中經(jīng)常見(jiàn)到的需求。比如:需要?jiǎng)h除一個(gè)訂單,一般不會(huì)把實(shí)際數(shù)據(jù)刪除,而是邏輯刪除。一般表中有一個(gè)is_deleted字段標(biāo)識(shí)該用戶是否被刪除,0 表示未刪除 1 表示已刪除。
配置(非必須)
配置刪除未刪除的狀態(tài)碼
配置未刪除、已刪除分別標(biāo)識(shí)的狀態(tài)碼是什么,這里采用的yml格式。
mybatis-plus:
global-config:
db-config:
# 1 代表已刪除。默認(rèn)是1。也可寫(xiě)為字段名,如:id,這樣刪除時(shí)會(huì)將id的值寫(xiě)到邏輯刪除字段
logic-delete-value: 1
# 0 代表未刪除。默認(rèn)是0
logic-not-delete-value: 0全局配置字段名(可不配置)
若項(xiàng)目代碼比較規(guī)范,所有表的邏輯刪除字段使用相同的名稱(比如:deleted_flag),我們可以在 application.properties 中添加如下統(tǒng)一的配置,這樣對(duì)應(yīng)的實(shí)體類字段上就不需要再添加 @TableLogic 注解了:
注意:如果設(shè)置了全局邏輯刪除字段值,實(shí)體類上仍然有 @TableLogic 則以實(shí)體上的為準(zhǔn),忽略全局。
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted_flagentity
實(shí)體類對(duì)應(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ù)庫(kù)
數(shù)據(jù)庫(kù)deleted列,設(shè)置為tinyint類型,長(zhǎng)度為1
測(cè)試
插入測(cè)試
插入時(shí),sql語(yǔ)句不會(huì)涉及邏輯刪除的字段。
查詢、修改測(cè)試
使用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
刪除測(cè)試
(執(zhí)行的SQL語(yǔ)句是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á)式來(lái)排除某些查詢字段,只是通過(guò)注解的方式更方便。
@TableLogic
@TableField(select = false)
private String deleted;到此這篇關(guān)于Mybatis-Plus邏輯刪除的用法詳解的文章就介紹到這了,更多相關(guān)Mybatis-Plus邏輯刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MyBatis-Plus邏輯刪除實(shí)現(xiàn)過(guò)程
- MyBatis-Plus中的邏輯刪除功能及實(shí)例分析
- mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
- mybatis-plus邏輯刪除與唯一約束沖突問(wèn)題
- 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)文章
IDEA指定Maven的settings不生效問(wèn)題的解決方法
在IntelliJ IDEA中手動(dòng)指定Maven settings文件未生效,主要因用戶目錄和全局配置優(yōu)先級(jí)高于IDEA指定的文件,下面就來(lái)介紹一下該問(wèn)題的解決,感興趣的可以了解一下2025-08-08
Java中try-catch的使用及注意細(xì)節(jié)
現(xiàn)在有很多的語(yǔ)言都支持try-catch,比如常見(jiàn)的就是c++,java等,這篇文章主要給大家介紹了關(guān)于Java中try-catch的使用及注意細(xì)節(jié)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕節(jié)快樂(lè))
這篇文章主要介紹了java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕節(jié)快樂(lè)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
java實(shí)現(xiàn)自動(dòng)售貨機(jī)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
springboot 2.0 mybatis mapper-locations掃描多個(gè)路徑的實(shí)現(xiàn)
這篇文章主要介紹了springboot 2.0 mybatis mapper-locations掃描多個(gè)路徑的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程
這篇文章主要介紹了遵循接口隔離原則的Java設(shè)計(jì)模式編程,針對(duì)Java編程中interface接口方面的編寫(xiě)進(jìn)行約束,需要的朋友可以參考下2016-02-02

