mybatisplus的邏輯刪除問(wèn)題
mybatisplus的邏輯刪除
mp提供的邏輯刪除實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單
只需要在application.yml中進(jìn)行邏輯刪除的相關(guān)配置即可
mybatis-plus: global-config: db-config: logic-delete-field: deleted # 全局邏輯刪除的實(shí)體字段名 logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為1) logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為0) # 若邏輯已刪除和未刪除的值和默認(rèn)值一樣,則可以不配置這2項(xiàng)
測(cè)試代碼
int i = mapper.deleteById(6); System.out.println("rowAffected = " + i);
可以看到,發(fā)出的SQL不再是DELETE,而是UPDATE
此時(shí)我們?cè)賵?zhí)行一次SELECT
@Test public void testSelect() { List<User2> users = mapper.selectList(null); }
可以看到,發(fā)出的SQL語(yǔ)句,會(huì)自動(dòng)在WHERE后面拼接邏輯未刪除的條件。
查詢出來(lái)的結(jié)果中,沒(méi)有了id為6的王軟蛋。
若想要SELECT的列,不包括邏輯刪除的那一列,則可以在實(shí)體類(lèi)中通過(guò)@TableField進(jìn)行配置
@TableField(select = false) private Integer deleted;
可以看到下圖的執(zhí)行結(jié)果中,SELECT中已經(jīng)不包含deleted這一列了
前面在application.yml中做的配置,是全局的。通常來(lái)說(shuō),對(duì)于多個(gè)表,我們也會(huì)統(tǒng)一邏輯刪除字段的名稱,統(tǒng)一邏輯已刪除和未刪除的值,所以全局配置即可。
當(dāng)然,若要對(duì)某些表進(jìn)行單獨(dú)配置,在實(shí)體類(lèi)的對(duì)應(yīng)字段上使用@TableLogic即可。
@TableLogic(value = "0", delval = "1") private Integer deleted;
【小結(jié)】
開(kāi)啟mp的邏輯刪除后,會(huì)對(duì)SQL產(chǎn)生如下的影響
INSERT
語(yǔ)句:沒(méi)有影響SELECT
語(yǔ)句:追加WHERE條件,過(guò)濾掉已刪除的數(shù)據(jù)UPDATE
語(yǔ)句:追加WHERE條件,防止更新到已刪除的數(shù)據(jù)DELETE
語(yǔ)句:轉(zhuǎn)變?yōu)閁PDATE語(yǔ)句
注意,上述的影響,只針對(duì)mp自動(dòng)注入的SQL生效。如果是自己手動(dòng)添加的自定義SQL,則不會(huì)生效。
比如:
public interface User2Mapper extends BaseMapper<User2> { @Select("select * from user2") List<User2> selectRaw(); }
調(diào)用這個(gè)selectRaw,則mp的邏輯刪除不會(huì)生效。
另,邏輯刪除可在application.yml中進(jìn)行全局配置,也可在實(shí)體類(lèi)中用@TableLogic進(jìn)行局部配置。
使用mybatisplus邏輯刪除,修改含有邏輯刪除的字段爆錯(cuò)
mybatisplus在配置文件中配置如下
以上是全局邏輯刪除配置。
當(dāng)使用mybatisplus生成的修改方法,修改含有showStatus對(duì)應(yīng)的字段時(shí),會(huì)報(bào)錯(cuò)。
錯(cuò)誤sql語(yǔ)句如下
而我要修改的如下:
正確的修改的sql語(yǔ)句應(yīng)該如下:
所以我們可以在xml文件中單獨(dú)寫(xiě)sql語(yǔ)句
或者不在配置文件中設(shè)置邏輯刪除字段名 使用@TableLogic注解
如下:
showStatus是表示此信息是否顯示。
如:
表示 show_status等于0時(shí) brand_id (即id)=1591652104429125634 的信息不顯示。
這樣我們就是局部使用邏輯刪除。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring AOP結(jié)合注解實(shí)現(xiàn)接口層操作日志記錄
在項(xiàng)目開(kāi)發(fā)中我們需要記錄接口的操作日志:包含請(qǐng)求參數(shù)、響應(yīng)參數(shù)、接口所屬模塊、接口功能描述、請(qǐng)求地址、ip地址等信息;實(shí)現(xiàn)思路很簡(jiǎn)單就是基于注解和aop的方式去記錄日志,主要的難點(diǎn)在于日志表結(jié)構(gòu)、注解的設(shè)計(jì)已經(jīng)aop實(shí)現(xiàn)的一些比較好的實(shí)現(xiàn)方式的借鑒2022-08-08Intellij Idea插件開(kāi)發(fā)之創(chuàng)建項(xiàng)目層級(jí)的右鍵菜單
這篇文章主要介紹了Intellij Idea插件開(kāi)發(fā)之創(chuàng)建項(xiàng)目層級(jí)的右鍵菜單,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02java.net.http.HttpClient使用示例解析
這篇文章主要為大家介紹了java.net.http.HttpClient使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08java中Map如何根據(jù)key的大小進(jìn)行排序詳解
這篇文章主要給大家介紹了關(guān)于java中Map如何根據(jù)key的大小進(jìn)行排序的相關(guān)資料,有時(shí)候我們業(yè)務(wù)上需要對(duì)map里面的值按照key的大小來(lái)進(jìn)行排序的時(shí)候我們就可以利用如下方法來(lái)進(jìn)行排序了,需要的朋友可以參考下2023-09-09java虛擬機(jī)之JVM調(diào)優(yōu)詳解
這篇文章主要介紹了java虛擬機(jī)之JVM調(diào)優(yōu)詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java虛擬機(jī)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹
Spring在3.1版本,就提供了一條基于注解的緩存策略,實(shí)際使用起來(lái)還是很絲滑的,本文將針對(duì)幾個(gè)常用的注解進(jìn)行簡(jiǎn)單的介紹說(shuō)明,有需要的小伙伴可以嘗試一下2021-07-07IntelliJ IDEA同步代碼時(shí)版本沖突而產(chǎn)生出的incoming partial文件問(wèn)題的解決辦法
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA同步代碼時(shí)版本沖突而產(chǎn)生出的incoming partial文件問(wèn)題的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10