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

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

只要变量值是数值型就用“=”!!!

只要变量值是单个大写或小写字母就用“=”!!!

相关文章
相关标签/搜索