MyBatis 判斷條件為等於的問題


原文:https://blog.csdn.net/shenzhenNBA/article/details/46673327

在用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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM