欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis?if?test?判斷字符串相等不生效問(wèn)題

 更新時(shí)間:2022年10月12日 11:15:30   作者:長(zhǎng)安明月  
這篇文章主要介紹了MyBatis?if?test?判斷字符串相等不生效問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)文章

最新評(píng)論