MyBatis 判斷條件爲等於的問題

在用MyBatis操作數據庫的時候相信很多人都用到,當在判斷null, 大於,大於等於,小於,小於等於,不等於時估計很多都用到,比較容易實現了,這裏就省略了,但唯獨判斷條件爲等於時估計蠻多人遇到坑了, 俺在這個問題上坑了差不多一天,於是把這個實驗總結並簡要記錄一下;

當MyBatis 判斷條件爲等於的時候,常量需要加 .toString() 來轉換,這種方法是穩定的,推薦使用,比如:

 

<!-- 正確的,穩定,推薦使用 -->
<if test="newsImage != null and newsImage == '1'.toString()">
	<![CDATA[ and len(newsImage) > 0 ]]>
</if>

其中判斷 newsImage == '1' 時,人爲認爲成功,但實際上是不成功的,需要改爲  newsImage == '1'.toString()方可成功,原因具體沒有細入研究,根據實際使用推測應該是 “等於” 在java中是個比較複雜問題,涉及的“等於”有可能是變量地址相等,或者是變量值內容相等,在XML文件中簡單的 == 在經過MyBatis處理後無法判斷是哪種類型的“相等”,所以加.toString()做強制轉換操作,MyBatis就知道是值內容的比較,當然就成功了; 注意這個常量不限於數字,對於字母,如 'y' 同樣需要加上 .toString()方可成功,如下:

<!-- 正確的,穩定,推薦使用 -->
<if test="newsImage != null and newsImage == 'y'.toString()">
	<![CDATA[ and len(newsImage) > 0 ]]>
</if>

那給變量加 .toString() 可以嗎?這個是錯誤的,至少實際在所使用的myBatis版本(mybatis-3.2.5.jar,mybatis-spring-1.2.1.jar)是不可以,以後版本不知道,這應該是在經過 myBatis 時,影響到其轉換操作,故出現錯誤,如下是錯誤的:

 

<!-- 錯誤的 -->
<if test="newsImage != null and newsImage.toString() == 'y'">
	<![CDATA[ and len(newsImage) > 0 ]]>
</if>

既然是值內容的比較,我們自然聯想到 Java 的 equals , equalsIgnoreCase 關鍵字,用這個可以嗎? 實際測試過,有時成功,有時不成功(有可能跟我的機子和我使用的Java環境的原因),很不穩定不推薦使用,所以如下是不穩定的:

<!--有時成功,有時不成功,不推薦使用-->
<if test="newsImage != null and newsImage.equal('y')">
	<![CDATA[ and len(newsImage) > 0 ]]>
</if>

遇到的坑,整整差不多苦了大半天,呵呵,暫時簡單總結和記錄到這裏。


本文載自:http://www.cnblogs.com/baizhanshi/p/5864846.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章