mybatis if 標籤 判斷兩個值是否相等的問題

用「==」比較的使用場景:

無論你用的什麼類型的變量,只要變量的值是字符類型就用「==」java

產生緣由:

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

示例以下:

參數:String queryKwd = "a";app

<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><-java 框架平臺 www.1b23.com ->

二、使用「=」比較 基本數據類型 的值

用「=」比較的使用場景:

一、無論你用的什麼類型的變量,只要變量的值是基礎數值類型就用「=」框架

二、當傳參的類型是Object的狀況下,當Object的值爲單個的大小寫字母或一些特殊字符串會被轉換成ASCII碼,此時也用」=「ide

產生緣由:

一、在mybatis中若是<if>標籤用一個「=」判斷左右兩邊的值是否相等,則mybatis會把「=」兩邊的值自動拆箱成基礎數據類型(Number類型)spa

二、當用Object爲參數變量,且值是以下單個大小寫字母或字符串,則會被轉換成相應十進制數字(ASCII碼錶只截取部分,更多能夠本身去網上查找)orm

示例以下:字符串

參數:String queryKwd = "1";get

<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><-java 框架平臺 www.1b23.com ->

 三、重要提示

在使用mybatis時,須要特別注意,當使用的參數無論是String/Object/int等類型的變量,咱們須要清楚業務變量的值會是字符型仍是數值型input

只要變量值是字符型就用「==」!!!

只要變量值是數值型就用「=」!!!

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

相關文章
相關標籤/搜索