解決mybatis case when 報(bào)錯(cuò)的問(wèn)題
在mybatis中使用case when進(jìn)行條件篩選判斷時(shí)遇到
Failed to process, please exclude the tableName or statementId.
這樣的報(bào)錯(cuò)信息,報(bào)錯(cuò)的信息是語(yǔ)法錯(cuò)誤
但是我在mysql的命令行中運(yùn)行sql語(yǔ)句是沒(méi)問(wèn)題的
//我的case when語(yǔ)句 WHERE dept.type = 1 AND ( CASE agent.dept_type WHEN "agent" THEN dept.id=30 END ) //當(dāng)agent的dept_type為"agent"時(shí),將添加dept.id = 30的判斷
這段sql語(yǔ)句在命令行內(nèi)運(yùn)行沒(méi)問(wèn)題但是放到mybatis上執(zhí)行就會(huì)報(bào)錯(cuò)
//修改后 WHERE dept.type = 1 AND dept.id= ( CASE agent.dept_type WHEN "agent" THEN 30 END )
后來(lái)將dept.id放到外面就解決了這個(gè)問(wèn)題
20190718-補(bǔ)充記錄 :遇到另一個(gè)問(wèn)題,如果dept這個(gè)表是聯(lián)查來(lái)的有可能會(huì)沒(méi)有數(shù)據(jù),在dept無(wú)數(shù)據(jù)的時(shí)候我們就無(wú)法給dept.id賦上啥參數(shù)了,并且不可以影響原表數(shù)據(jù)的查詢,我改成了下面這樣:
//修改后 WHERE dept.type = 1 AND (dept.id= ( CASE agent.dept_type WHEN "agent" THEN 30 ELSE 0 END ) or dept.id is null)
添加dept.id為空的判斷即可
(在mysql語(yǔ)句里可以有很多方法解決,但是在mybatis上就會(huì)報(bào)錯(cuò) -_-||)
2019-7-30-補(bǔ)充說(shuō)明:
如果是空字符串不可以使用""要改成單引號(hào)''
CASE WHEN *** THEN *** ELSE "" =>這樣也會(huì)報(bào)錯(cuò),需要改成=> ELSE''
補(bǔ)充:Mybatis case when test 注意事項(xiàng)
<choose>
<when test="groupBy!=null and groupBy==1">
p_id areaId,
</when>
<when test="groupBy!=null and groupBy==2">
c_id areaId,
</when>
<when test="groupBy!=null and groupBy==3">
r_id areaId,
</when>
</choose>
test 中 用 == 不能用 = ,否則報(bào)錯(cuò)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
SpringBoot使用MyBatis-Plus解決Invalid?bound?statement異常
這篇文章主要介紹了SpringBoot使用MyBatis-Plus解決Invalid?bound?statement異常,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
java.lang.OutOfMemoryError: Java heap space錯(cuò)誤
本文主要介紹了java.lang.OutOfMemoryError: Java heap space錯(cuò)誤的問(wèn)題解決,包括內(nèi)存泄漏、數(shù)據(jù)過(guò)大和JVM堆大小配置不足,提供了解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本分享
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2023-03-03
Java結(jié)合redistemplate使用分布式鎖案例講解
在Java中使用RedisTemplate結(jié)合Redis來(lái)實(shí)現(xiàn)分布式鎖是一種常見(jiàn)的做法,特別適用于微服務(wù)架構(gòu)或多實(shí)例部署的應(yīng)用程序中,以確保數(shù)據(jù)的一致性和避免競(jìng)態(tài)條件,下面給大家分享使用Spring Boot和RedisTemplate實(shí)現(xiàn)分布式鎖的案例,感興趣的朋友一起看看吧2024-08-08
springboot打包JAR包瘦身lib和配置文件分離方式
本文介紹了如何通過(guò)優(yōu)化POM.xml配置來(lái)減小JAR包大小,提高傳輸速度,主要步驟包括:指定打包環(huán)境和跳過(guò)編譯單元測(cè)試、JAR打包排除配置文件和lib、提供全量包便于開(kāi)發(fā)環(huán)境使用、將lib和配置文件單獨(dú)復(fù)制出來(lái)2024-11-11
Javaweb基礎(chǔ)入門HTML之table與form
HTML的全稱為超文本標(biāo)記語(yǔ)言,是一種標(biāo)記語(yǔ)言。它包括一系列標(biāo)簽.通過(guò)這些標(biāo)簽可以將網(wǎng)絡(luò)上的文檔格式統(tǒng)一,使分散的Internet資源連接為一個(gè)邏輯整體。HTML文本是由HTML命令組成的描述性文本,HTML命令可以說(shuō)明文字,圖形、動(dòng)畫(huà)、聲音、表格、鏈接等2022-03-03

