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

MyBatis?if?test?判斷字符串相等不生效問題

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

MyBatis if test 判斷字符串相等不生效

采用 MyBatis 框架操作 MySQL 數(shù)據(jù)庫時,判斷傳入的字符串 priceFlag 值為"0"時,按照 price 屬性降序排列,如下 xml 語句未生效:

<if test="priceFlag != null and priceFlag == '0'">
? ? ? ORDER BY price DESC
</if>

原因分析

MyBatis 是使用 OGNL 表達(dá)式來進(jìn)行解析的,在 OGNL 表達(dá)式中,'0’會被解析成字符,因?yàn)?java 是強(qiáng)類型的,char 和 String 不等,所以 if 標(biāo)簽中的 SQL 不會被解析。

解決方法

解決這個問題,可以把 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判斷等于某個字符串執(zhí)行另一個sql語句的原則,沒想到想當(dāng)然了,使用 if test=“sex==‘m’”直接報錯,看了下網(wǎng)上果然大家都有遇到這樣的問題,解決方式如下:

1. if 判斷字符串

  • 錯誤寫法:if test="status == 'Y'"特別是數(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>

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論