解決mybatis where-if中if不能識(shí)別大寫AND,OR的問題
mybatis報(bào)錯(cuò):
Caused by: org.apache.ibatis.ognl.ParseException: Encountered " "AND “” at line 1
錯(cuò)誤代碼:
<select id="selectAccountList" resultMap="BaseResultMap"> SELECT ct.customer_name customerName,sam.city_code,sam.user_name,sam.account_name FROM sys_account_manager sam LEFT JOIN sys_customer ct ON ct.id = sam.customer_id WHERE sam.deleted = 0 <if test="customerName != null AND customerName != '' "> AND ct.customer_name LIKE concat('%',#{customerName},'%') </if> <if test="cityCode != null AND cityCode != '' "> AND LOCATE(#{cityCode},sam.city_code) </if> order by status,account_validity_time DESC </select>
正確代碼:
原因是:
if條件中AND為大寫,大寫不能識(shí)別,應(yīng)改為小寫。
<select id="selectAccountList" resultMap="BaseResultMap"> SELECT ct.customer_name customerName,sam.city_code,sam.user_name,sam.account_name FROM sys_account_manager sam LEFT JOIN sys_customer ct ON ct.id = sam.customer_id WHERE sam.deleted = 0 <if test="customerName != null and customerName != '' "> AND ct.customer_name LIKE concat('%',#{customerName},'%') </if> <if test="cityCode != null and cityCode != '' "> AND LOCATE(#{cityCode},sam.city_code) </if> order by status,account_validity_time DESC </select>
補(bǔ)充:Mybatis中if判斷遇到的坑
最近在項(xiàng)目開發(fā)的過程中,遇到了Mybatis的一個(gè)坑(也許是Mybatis有意這樣設(shè)計(jì)的),對(duì)于Integer或者Long這種引用數(shù)據(jù)類型,在做if判斷的時(shí)候,如果引用數(shù)據(jù)類型為0,則mybatis將會(huì)視為”“空字符串,所以走不進(jìn)判斷邏輯里。
以下余額字段為L(zhǎng)ong類型,availableAmount值為0時(shí),將走不進(jìn)判斷方法內(nèi)的示例截圖:
解決方法:
在test判斷條件中添加”or availableAmount==0“即可,以下是示例截圖:
或者在業(yè)務(wù)場(chǎng)景允許的情況下,只判斷availableAmount!=null
<if test="availableAmount!=null"> ... </if>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件本地窗口實(shí)現(xiàn)(5)
這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP軟件本地窗口的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式
建造者模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過程抽象出來(lái),使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。本文將通過示例講解建造者模式,需要的可以參考一下2022-04-04Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過程
幾十萬(wàn)上百萬(wàn)行的數(shù)據(jù)是很常見的。本文主要介紹了Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Springboot過濾器禁止ip頻繁訪問功能實(shí)現(xiàn)
這篇文章主要介紹了Springboot過濾器禁止ip頻繁訪問功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04springboot log4j2不能打印框架錯(cuò)誤日志的解決方案
這篇文章主要介紹了springboot log4j2不能打印框架錯(cuò)誤日志的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類示例詳解
這篇文章主要介紹了Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07