mybatis if 標(biāo)簽的一般用法:
方法一:
<if test="keyword != null and keyword !=''">
and column_a like concat('%',#{keyword},'%')
</if>
或者這樣,方法二:
<if test="keyword != null and keyword !=''">
and column_a like concat('%',#{keyword},'%')
</if>
也就是說,test條件可以用雙引號(hào)括起來,里面的字符串用單引號(hào),也可以test條件用單引號(hào)括起來,里面的字符串用雙引號(hào).兩種寫法都可以.
但是當(dāng)我要比較keyword是否等于"a"時(shí),用方法一是寫成如下:
<if test="keyword =='a'">
and column_a = 'a'
</if>
這時(shí)如果keyword的值是"a",運(yùn)行的時(shí)候會(huì)報(bào)這樣的異常:java.lang.NumberFormatException: For input string: "a".
解決方法如下:
用方法二的方式:
<if test='keyword =="a"'>
and column_a = 'a'
</if>
或者還是用方法一,但是'a'改成'a'.toString()
<if test="keyword =='a'.toString()">
and column_a = 'a'
</if>
原因是ognl語法問題, test條件內(nèi)的長度為1的字符串'a'會(huì)被當(dāng)成char類型,所以傳入的keyword值會(huì)轉(zhuǎn)成數(shù)字與其比較,如果keyword的值是"a",就會(huì)報(bào)錯(cuò),但如果是如<if test="keyword =='ab'"><if test="keyword ==''">這樣的寫法就不會(huì)有這種問題,因?yàn)橹挥袉蝹€(gè)字符才會(huì)被當(dāng)成char類型,'ab'和''還是當(dāng)成字符串做比較的.