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