MyBatis?if?test?判斷字符串相等不生效問(wèn)題
MyBatis if test 判斷字符串相等不生效
采用 MyBatis 框架操作 MySQL 數(shù)據(jù)庫(kù)時(shí),判斷傳入的字符串 priceFlag 值為"0"時(shí),按照 price 屬性降序排列,如下 xml 語(yǔ)句未生效:
<if test="priceFlag != null and priceFlag == '0'"> ? ? ? ORDER BY price DESC </if>
原因分析
MyBatis 是使用 OGNL 表達(dá)式來(lái)進(jìn)行解析的,在 OGNL 表達(dá)式中,'0’會(huì)被解析成字符,因?yàn)?java 是強(qiáng)類(lèi)型的,char 和 String 不等,所以 if 標(biāo)簽中的 SQL 不會(huì)被解析。
解決方法
解決這個(gè)問(wèn)題,可以把 if test 判斷語(yǔ)句修改成如下幾種方式中的任何一種:
<if test='"0" == priceFlag'>
或者
<if test='"0".equals(priceFlag)'>
或者
<if test="'0'.toString() == priceFlag">
修改完成后,SQL 語(yǔ)句就可以被解析了。
MyBatis if test 判斷字符串相等的坑
自己開(kāi)發(fā)的系統(tǒng),客戶(hù)反映有問(wèn)題,本著不想改java代碼,想想從數(shù)據(jù)庫(kù)入手,加一些判斷條件就想到了if test判斷等于某個(gè)字符串執(zhí)行另一個(gè)sql語(yǔ)句的原則,沒(méi)想到想當(dāng)然了,使用 if test=“sex==‘m’”直接報(bào)錯(cuò),看了下網(wǎng)上果然大家都有遇到這樣的問(wèn)題,解決方式如下:
1. if 判斷字符串
- 錯(cuò)誤寫(xiě)法:if test="status == 'Y'"特別是數(shù)字字符的時(shí)候。。。。
結(jié)果:拋異常NumberFormatException異常!提示內(nèi)容非常少,看不出問(wèn)題在哪里!
- 正確寫(xiě)法:if test='status == "y" '
還可以這樣寫(xiě):if test="status == 'y'.toString()"
2. if嵌套
? ? ? ? <if test="@com.qbao.tickets.common.util.MybatisUtils@isNotEmpty(firstLetter)"> ? ? ? ? ? ? ?<if test="firstLetter=='-1'.toString()"> ? ? ? ? ? ? ? ? and FIRST_LETTER is null or FIRST_LETTER ='' ? ? ? ? ? ?</if> ? ? ? ? ? ? ? ? ? ? ? ?<if test="firstLetter!='-1'.toString()"> ? ? ? ? ? ? ? ?and FIRST_LETTER = #{firstLetter, jdbcType=VARCHAR} ? ? ? ? ? ?</if> ? ? ? ? </if>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用BigDecimal進(jìn)行精確運(yùn)算(實(shí)現(xiàn)加減乘除運(yùn)算)
這篇文章主要介紹了如何使用BigDecimal進(jìn)行精確運(yùn)算,最后提供了一個(gè)工具類(lèi),該工具類(lèi)提供加,減,乘,除運(yùn)算2013-11-11如何解決hibernate一對(duì)多注解懶加載失效問(wèn)題
這篇文章主要介紹了解決hibernate一對(duì)多注解懶加載失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10springboot配置ssl后啟動(dòng)一直是端口被占用的解決
這篇文章主要介紹了springboot配置ssl后啟動(dòng)一直是端口被占用的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Spring Cloud 的 Hystrix.功能及實(shí)踐詳解
這篇文章主要介紹了Spring Cloud 的 Hystrix.功能及實(shí)踐詳解,Hystrix 具備服務(wù)降級(jí)、服務(wù)熔斷、線(xiàn)程和信號(hào)隔離、請(qǐng)求緩存、請(qǐng)求合并以及服務(wù)監(jiān)控等強(qiáng)大功能,需要的朋友可以參考下2019-07-07Map 使用 Lambda 的 forEach 實(shí)現(xiàn)跳出循環(huán)操作
這篇文章主要介紹了Map 使用 Lambda 的 forEach 實(shí)現(xiàn)跳出循環(huán)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09mysql數(shù)據(jù)庫(kù)忘記密碼時(shí)如何修改
本文主要介紹了mysql數(shù)據(jù)庫(kù)忘記密碼時(shí)如何修改的步驟方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能,結(jié)合完整實(shí)例形式分析了java針對(duì)銀行卡類(lèi)型、歸屬地等信息的判斷、讀取相關(guān)操作技巧,需要的朋友可以參考下2018-06-06