码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-20 19:14:50      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:factor   错误   tor   字符型   resultmap   示例   参数   拆箱   基础   

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、使用“=”比较 基本数据类型 的值

用“=”比较的使用场景:

不管你用的什么类型的变量,只要变量的值是基础数值类型就用“=”

产生原因:

在mybatis中如果<if>标签用一个“=”判断左右两边的值是否相等,则mybatis会把“=”两边的值自动拆箱成基础数据类型(Number类型)

示例如下:

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

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

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

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

标签:factor   错误   tor   字符型   resultmap   示例   参数   拆箱   基础   

原文地址:https://www.cnblogs.com/tianchao/p/11558789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!