Mybatis plus邏輯刪除失敗的BUG操作
開(kāi)發(fā)調(diào)試的時(shí)候發(fā)現(xiàn)Mybatis Plus的邏輯刪除失效了,看了下配置文件發(fā)現(xiàn)沒(méi)有問(wèn)題,通過(guò)查看以下源碼發(fā)現(xiàn)
邏輯刪除需要注入的bean,查看這個(gè)bean的源碼如下
查看其中一個(gè)實(shí)例的類(lèi)的源碼,如通過(guò)ID邏輯刪除LogicDeleteById的源碼,如下
mp在項(xiàng)目啟動(dòng)時(shí)預(yù)加載SQL是通過(guò)TableInfo中l(wèi)ogicDelete字段判斷是否開(kāi)啟邏輯刪除的。然后讓我們來(lái)看看mp內(nèi)部是如何判斷是否開(kāi)啟邏輯刪除的。
先看如下源碼
大概就是講實(shí)體類(lèi)中的字段進(jìn)行循環(huán)映射數(shù)據(jù)庫(kù)字段并封裝到TableFieldInfo類(lèi)中,實(shí)體類(lèi)信息封裝到TableInfo中,在讓我們來(lái)看看MP循環(huán)處理字段時(shí)候做了什么操作。
上圖中的這一行代碼,
讓我們看看這行代碼具體做了什么
現(xiàn)在已經(jīng)很明確了,mp通過(guò)判斷字段上是否有TableLogic注解來(lái)判斷該實(shí)體類(lèi)映射的表是否開(kāi)啟邏輯刪除。但這一步是放到實(shí)體類(lèi)所有的字段列表的循環(huán)中的,當(dāng)邏輯刪除字段在所有的字段中間而不是末尾的時(shí)候,判斷邏輯刪除的表示logicDelete會(huì)被覆蓋為false,然后導(dǎo)致解析方法生成聲明的時(shí)候判斷為沒(méi)有開(kāi)啟邏輯刪除。
mp已經(jīng)更新了這個(gè)錯(cuò)誤,在設(shè)置logicDelete時(shí)會(huì)先判斷原來(lái)的刪除標(biāo)識(shí)是否為true,否則保持原來(lái)的初始值false。
補(bǔ)充知識(shí):分布式 mybatis-plus 邏輯刪除不生效 升級(jí)后org.mybatis.logging.LoggerFactory報(bào)錯(cuò)
解決方案:
第一步:升級(jí)mybatisplus版本到3.2.0
第二步:多添加一個(gè)擴(kuò)展包
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.2.0</version> </dependency>
以上這篇Mybatis plus邏輯刪除失敗的BUG操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 一文詳解MySQL數(shù)據(jù)庫(kù)索引優(yōu)化的過(guò)程2. MyEclipse添加SQL Server 2008數(shù)據(jù)庫(kù)的方法3. Oracle的兩個(gè)重要文件:TNSNAMES.ORA4. 如何安裝MySQL 壓縮包5. MySQL中InnoDB和MyISAM類(lèi)型的差別6. 詳細(xì)講解Oracle在Solaris下的性能與調(diào)整7. Oracle根據(jù)逗號(hào)拆分字段內(nèi)容轉(zhuǎn)成多行的函數(shù)說(shuō)明8. mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測(cè)安裝有效)9. MongoDB啟動(dòng)報(bào)錯(cuò) 28663 Cannot start server10. MySQL MyISAM 與InnoDB 的區(qū)別
