【容易坑】mybatis中使用if标签比较两个字符串是否相等
继续往下面想,这个if语句的执行顺序,应该是在执行SQL查询之前,那可以推断的是,Mybatis在执行SQL时,首先是先将所有的标签转化组装为SQL,然后在执行SQL语句。activityType就是在这个if判断语句中,被赋值为2的,即使在Mybatis的初始绑定值为3,那这么说的话,activityType不为null时,它的值会一直为2。这是一个简单的条件判断,并决定排序字段的语句,但是中间
这篇文章资料来自于网络,对部分知识整理,这里只是记录一下,仅供参考。
现象
上传参数确实为3,但是到了sql中还是2,很纳闷,确定不是上送参数的问题
问题解决
问题的关键点就在于为啥偏偏是2身上,仔细看一下sql语句,这个activityType还是和2产生过联系的。
这是一个简单的条件判断,并决定排序字段的语句,但是中间却使用了等号作为判断条件,显然这儿是不成立的,大抵已经找到原因了。
activityType就是在这个if判断语句中,被赋值为2的,即使在Mybatis的初始绑定值为3,那这么说的话,activityType不为null时,它的值会一直为2。
继续往下面想,这个if语句的执行顺序,应该是在执行SQL查询之前,那可以推断的是,Mybatis在执行SQL时,首先是先将所有的标签转化组装为SQL,然后在执行SQL语句。所以这里就已经被赋错了值。
解决办法也特别简单,就是再加一个=就可以了,标准的判断语句而已。
补充 :mybatis的映射文件中,使用的是ognl表达式,所以在字符串进行判等的时候,可使用以下两种方法
<if test="sex=='Y'.toString()">
或者
<if test = 'sex== "Y"'>
唯独不能使用
<if test="sex=='Y'">
因为mybatis会把’Y’解析为字符,java是强类型语言,所以不能这样写。
其他方案
方法一:
<if test="delFlag == '2'.toString()"> a.del_flag = #{delFlag} </if>
方法二:
<if test=' delFlag == "2" '> a.del_flag = #{delFlag} </if>
注意test 后面跟的是双引号( " " )还是单引号( ' ' )
ps:用equals()亲测也可以
方法三:
<if test=' delFlag.equals("2") '> a.del_flag = #{delFlag} </if>
注意:使用如下方式是错的
1 <if test=" delFlag == '2' "> 2 a.del_flag = #{delFlag} 3 </if>
使用上面示例中 "delFlag =='2' " , Mybatis会将 “2” 解析为字符(java 强类型语言, ‘2’ char 类型 ),而非字符串,不能做到判断的效果。 要在Mybatis中判断字符串是否相等,请使用 方法一 或 方法二。
参考:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)