2016年8月28日 每週一篇博客
在項目中xml文件經常會遇到在判斷等於某個值時加什麼條件不等於某個值的時候加什麼條件,比如下面這個例子:
<if test=" name != null">
AND T.NAME = #{NAME,jdbcType=VARCHAR}
</if>
<if test=" name == null">
ORDER BY NAME,ID
</if>
正確很好的寫法需要引入<choose>標籤
<choose>
<when
test=" name != null">
AND T.NAME = #{NAME,jdbcType=VARCHAR}
</when>
<otherwise>
ORDER BY T.PRODUCT_TYPE_CODE, T.SORT DESC, T.CREATE_TIME
</otherwise>
</choose>
第一種錯誤寫法導致的結果就是不會去做任何判斷即使name不爲空。爲什麼只能用<choose>標籤,源碼還沒有研究,或者我這個例子本身就有問題現在記錄下來,在後續的更新中我會再次總結一下這個問題。
2.
<!--錯誤的寫法-->
<if test="newsImage != null and newsImage == 'y'">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
<!-- 正確的,穩定,推薦使用 -->
<if test="newsImage != null and newsImage == 'y'.toString()">
<![CDATA[ and len(newsImage) > 0 ]]>
</if>
判斷 newsImage == 'y' 時,有人認爲成功,但實際上是不成功的,需要改爲 newsImage == 'y'.toString()方可成功,原因具體沒
有細入研究,根據實際使用推測應該是 “等於” 在java中是個比較複雜問題,涉及的“等於”有可能是變量地址相等,或者是變量值內
容相等,在XML文件中簡單的 == 在經過MyBatis處理後無法判斷是哪種類型的“相等”,所以加.toString()做強制轉換操作,MyBatis
就知道是值內容的比較,當然就成功了;注意這個常量不限於數字,對於字母,如 'y' 同樣需要加上 .toString()方可成功。