mybatis里if标签判断字符串相等不相等的有关问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis里if标签判断字符串相等不相等的有关问题相关的知识,希望对你有一定的参考价值。

参考技术A 1.判断两个字符是否相等char a = 'a';char b = 'b';if (a == b) cout<<"a, b相等"; else cout<<"a, b 不相等";2.判断两个字符串是否相等char * str1, *str2;str1 = "Hello";str2 = "Hello";if(0 == strcmp(str1, str2)) cout<<"str1 与 str2 内容相同"<本回答被提问者采纳

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等类型的变量,我们需要清楚业务变量的值会是字符型还是数值型

只要变量值是字符型就用“==”!!!(比如: <if test=" \'1\'==\'1\' ">)

只要变量值是数值型、整形等就用“==”!!!(比如: <if test=" 1==1 ">)

整形数值与字符串数值比价要用“==”且使用双引号!!!(比如: <if test=\' 1=="1" \'>) 

(错误写法:<if test=" 1==\'1\' ">,不会报错,但永不成立)

(错误写法:<if test=\' 1="1" \'>或<if test=" 1=\'1\' "> ,运行时抛异)

 

以上是关于mybatis里if标签判断字符串相等不相等的有关问题的主要内容,如果未能解决你的问题,请参考以下文章

mybatis中if标签判断字符串相等问题

mybatis if标签判断字符串

mybatis if判断两个值是否相等存在的坑啊

MyBatis if test 判断字符串相等不生效

mybatis if判断两个值是不是相等存在的坑啊

thinkphp-条件判断-if标签3