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

