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等類型的變量,我們需要清楚業務變量的值會是字符型還是數值型
只要變量值是字符型就用“==”!!!
只要變量值是數值型就用“=”!!!
只要變量值是單個大寫或小寫字母就用“=”!!!