解決mybatis case when 報(bào)錯(cuò)的問題
在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ǔ)句是沒問題的
//我的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)行沒問題但是放到mybatis上執(zhí)行就會(huì)報(bào)錯(cuò)
//修改后 WHERE dept.type = 1 AND dept.id= ( CASE agent.dept_type WHEN "agent" THEN 30 END )
后來將dept.id放到外面就解決了這個(gè)問題
20190718-補(bǔ)充記錄 :遇到另一個(gè)問題,如果dept這個(gè)表是聯(lián)查來的有可能會(huì)沒有數(shù)據(jù),在dept無數(shù)據(jù)的時(shí)候我們就無法給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ǔ)充說明:
如果是空字符串不可以使用""要改成單引號(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)文章
Java在并發(fā)環(huán)境中SimpleDateFormat多種解決方案
這篇文章主要介紹了Java在并發(fā)環(huán)境中SimpleDateFormat多種解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07@Resource和@Autowired兩個(gè)注解的區(qū)別及說明
這篇文章主要介紹了@Resource和@Autowired兩個(gè)注解的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java實(shí)現(xiàn)十秒向MySQL插入百萬(wàn)條數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)十秒向MySQL插入百萬(wàn)條數(shù)據(jù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下2022-11-11