mybatis 字符串比較失效

在mybatis的mapper.xml中用以下語句判斷條件:

<if test="name='0'">? ??

and name=#{name}

</if>?

實現(xiàn),當(dāng)name傳入字符串0時,判斷name的值

但是在實際運行過程中,這個判斷條件并沒有生效。

原因:mybatis是用OGNL表達(dá)式來解析的,在OGNL的表達(dá)式中,'0'會被解析成字符,而java是強(qiáng)類型的,傳入的是一個String類型,故而?char和String比較時是不相等的。所以sql中if標(biāo)簽是不會被解析的

解決方法:

一、使用用雙引號

<if test='name="0"'>
and name=#{name}

</if>

二、使用toString()

<if test="name='0'.toString()">

and name=#{name}

</if>

推薦使用第二種toString方法。

PS:mybatis中的if、when等里面的test條件判斷時,被判斷的字段可以通過調(diào)用java.util.String的方法進(jìn)行判斷,如:

<when test='fwbdh.indexOf(",") != -1'>

AND t.FWBDH in (${fwbdh})

</when>



多條件判斷標(biāo)簽choose when otherwise

choose標(biāo)簽是按順序判斷其內(nèi)部的when標(biāo)簽,當(dāng)某一個when標(biāo)簽滿足條件后,則choose標(biāo)簽結(jié)束,當(dāng)所有的when標(biāo)簽都不滿足時,則執(zhí)行最后的otherwise標(biāo)簽

<!-- choose(判斷參數(shù)) - 按順序?qū)嶓w類 User 第一個不為空的屬性作為:where條件 --> <select id="getProductList_choose" resultMap="resultMap_user" parameterType="com.entity.Product">

SELECT * FROM Product p

<where>

????<choose>

????????????<when test="name !=null ">

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p.name LIKE CONCAT(CONCAT('%', #{name, jdbcType=VARCHAR}),'%')

????????????</when >

????????????<when test="type!= null and type!= ' ' ">

? ? ? ? ? ? ? ? ? ? ? AND p.type= #{type, jdbcType=INTEGER}

????????????</when >

????????????<otherwise>

? ? ? ? ? ? ? ? ? ? AND p.price = #{price, jdbcType=NUMBER}

? ? ? ? ? ? ? ? </otherwise>

? ? ? ? ? ? </choose>

????????</where>

</select>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容