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_flag
entity
實(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Graphics實(shí)現(xiàn)界面顯示文字并換行
Java中Graphics類提供了一些基本的幾何圖形繪制方法,本文將利用Graphics實(shí)現(xiàn)界面顯示文字并換行效果,感興趣的小伙伴可以動(dòng)手嘗試一下2022-08-08如何通過(guò)Java實(shí)現(xiàn)PDF轉(zhuǎn)高質(zhì)量圖片
在Java中,將PDF文件轉(zhuǎn)換為高質(zhì)量的圖片可以使用不同的庫(kù),其中最常用的庫(kù)之一是?Apache?PDFBox,下面我們就來(lái)看看這個(gè)庫(kù)的具體使用吧2024-10-10springboot+mybatis-plus實(shí)現(xiàn)自動(dòng)建表的示例
本文主要介紹了springboot+mybatis-plus實(shí)現(xiàn)自動(dòng)建表的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06大模型chat/completions和completions區(qū)別解析
OpenAI的completions和chat/completions是兩個(gè)不同的端點(diǎn),completions用于單次文本補(bǔ)全,而chat/completions用于多輪對(duì)話生成,選擇哪個(gè)端點(diǎn)取決于你的具體需求,本文介紹大模型chat/completions和completions區(qū)別,感興趣的朋友一起看看吧2025-03-03如何實(shí)現(xiàn)Java線程安全問(wèn)題
這篇文章主要介紹了如何實(shí)現(xiàn)Java線程安全問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12java發(fā)送http請(qǐng)求并獲取狀態(tài)碼的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇java發(fā)送http請(qǐng)求并獲取狀態(tài)碼的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05