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

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

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

产生原因:

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

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

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

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

时间: 2024-10-15 05:03:06

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

C标签判断两个值是否相等

c标签判断两个值是否相等 Integer用:${user1.id eq user2.id}:int用:${user1.id == user2.id} 测试代码如下:<c:if test="${not empty listByParentId }">    <c:forEach items="${listByParentId }" var="listByParentId">       <c:if test="

自定义验证(判断两个值同时唯一)

using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Globalization; using System.Linq; using System.Runtime.CompilerServices; using System.Web; using BLL.BLL; namespace www.nabian.com.Models { publ

ES6基础之——对比两个值是否相等Object.is()

对比两个值是否相等我们可以使用==,或者判断绝对相等使用===.它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身以及正0等于负0 +0 == -0 //true +0 === -0 //true 不过这两个东西是不一样的 再比如: NaN == NaN //false 不过他们是一个东西 遇到这种情况,可以使用Object.is()方法,两个参数就是要对比的东西,比如: Object.is(NaN,NaN) //true Object.is(+0,-0) //false 大部分情况下

==运算符是判断栈中两个值是否相等

默认情况下(也即类型没有重载==运算符的情况下),==运算符是判断栈中两个值是否相等.为了验证这个结论,来看下面的程序: namespace JudgeEquals{    class Program    {        static void Main(string[] args)        {            int a = 10;            int b = 10;            Console.WriteLine(a==b); string s1 = "a

JS判断两个对象是否键值对应相等

//isEqual:判断两个对象是否键值对应相等 function isEqual(a,b){ //如果a和b本来就全等 if(a===b){ //判断是否为0和-0 return a !== 0 || 1/a ===1/b; } //判断是否为null和undefined if(a==null||b==null){ return a===b; } //接下来判断a和b的数据类型 var classNameA=toString.call(a), classNameB=toString.call(

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd

mybatis 中的 update 返回值

摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库中的数据记录.总共两条数据记录! 数据库链接配置为: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=123456 下面看看我们的单

java 判断两个时间相差的天数!

package com.datedaycha;     import java.text.SimpleDateFormat;     import java.util.Calendar;     import java.util.Date;     import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;     /*      * java 判断两个时间相差的天数     1.实现目标     输入:两

如何判断两个日期在一周内

如何判断两个日期在一周内,首先,需要搞清楚一周内到底是什么含义,国内通常是以周一作为每周的第一天,而西方普遍以周日作为每周的第一天. 以下,我们以西方的标准来处理这个问题. 常见的日期结构: struct DateTime { int year; int month; int day; int weekday; //days since Sunday - [0, 6] int hour; int minute; int second; }; 上述结构中与周相关的参数只有weekday,应该设法利