mybatis if判斷兩個值是否相等存在的坑啊


1、使用“==”比較 字符類型 的值

用“==”比較的使用場景:

不管你用的什么類型的變量,只要變量的值是字符類型就用“==”

產生原因:

在mybatis中如果<if>標簽用一個“=”判斷左右兩邊的值是否相等,則mybatis會把“=”兩邊的值自動拆箱成基礎數據類型(Number類型)

示例如下:

參數:String queryKwd = "a";

<select id="getFactoryInfoList" resultMap="BaseResultMap" >
   select * from PM_FACTORY_INFO
   where DEL_FLAG='0'
       <if test="queryKwd == 'a'"><!--正確寫法-->
           and 1=1
       </if>
       <if test="queryKwd = 'a'"><!--錯誤寫法: 字符類型不能用一個“=”判斷是否相等,會報錯:Caused by: java.lang.NumberFormatException: For input string: "a" -->
           and 2=2
       </if>
</select>

2、使用“=”比較 基本數據類型 的值

用“=”比較的使用場景:

1、不管你用的什么類型的變量,只要變量的值是基礎數值類型就用“=”

2、當傳參的類型是Object的情況下,當Object的值為單個的大小寫字母或一些特殊字符串會被轉換成ASCII碼,此時也用”=“

產生原因:

1、在mybatis中如果<if>標簽用一個“=”判斷左右兩邊的值是否相等,則mybatis會把“=”兩邊的值自動拆箱成基礎數據類型(Number類型)

2、當用Object為參數變量,且值是如下單個大小寫字母或字符串,則會被轉換成相應十進制數字(ASCII碼表只截取部分,更多可以自己去網上查找)

 

 

示例如下:

參數:String queryKwd = "1";

<select id="getFactoryInfoList" resultMap="BaseResultMap" >
   select * from PM_FACTORY_INFO
   where DEL_FLAG='0'
       <if test="queryKwd == '1'"><!--錯誤寫法,雖然不報錯,但是永遠不會成立-->
           and 1=1
       </if>
       <if test="queryKwd = '1'"><!--正確寫法-->
           and 2=2
       </if>
</select>

 3、重要提示

在使用mybatis時,需要特別注意,當使用的參數不管是String/Object/int等類型的變量,我們需要清楚業務變量的值會是字符型還是數值型

只要變量值是字符型就用“==”!!!

只要變量值是數值型就用“=”!!!

只要變量值是單個大寫或小寫字母就用“=”!!!


免責聲明!

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



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