1、使用“==”比较 字符类型 的值

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

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

产生原因:

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

示例如下:

参数:String queryKwd = "a";

<select id="getFactoryInfoList" resultMap="BaseResultMap" >
select * from PM_FACTORY_INFO
where DEL_FLAG=''
<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=''
<if test="queryKwd == '1'"><!--错误写法,虽然不报错,但是永远不会成立-->
and 1=1
</if>
<if test="queryKwd = '1'"><!--正确写法-->
and 2=2
</if>
</select>

3、重要提示

在使用mybatis时,需要特别注意,当使用的参数不管是String/Object/int等类型的变量,我们需要清楚业务变量的值会是字符型还是数值型

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

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

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

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

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

    c标签判断两个值是否相等 Integer用:${user1.id eq user2.id}:int用:${user1.id == user2.id} 测试代码如下:<c:if test=&quo ...

  2. C语言判断两个值相等

    内置类型比较直接用==判断 字符串比较要用string.h里的函数strcmp(const char *str1,const char *str2)进行比较string.h里的函数strcmp(con ...

  3. mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样

    Mybatis批量更新数据 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批 ...

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

    java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...

  5. mybatis 中的 update 返回值

    摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...

  6. 【跟着子迟品 underscore】JavaScript 中如何判断两个元素是否 "相同"

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

  7. java integer对象判断两个数字是否相等

    java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...

  8. 判断两个IP是否属于同一子网

    描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据.子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”.利用子网掩码可以判断两台主机是否 ...

  9. 实验12:Problem D: 判断两个圆之间的关系

    Home Web Board ProblemSet Standing Status Statistics   Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 T ...

随机推荐

  1. python历史背诵

    一.python简介 python2:源代码不统一 有重复功能的代码 默认编码是ascii 没有中文 输出中文需要用头文件 #-*-coding=utf-8-*- 进行转换 py3:源代码统一 没有重 ...

  2. Jenkins使用aqua-microscanner-plugin进行容器漏洞扫描

    官方地址:https://github.com/jenkinsci/aqua-microscanner-plugin Step1 在jenkins安装"Aqua MicroScanner&q ...

  3. jmeter+Fiddler:通过Fiddler抓包生成jmeter脚本

    Fiddler是目前最常用的抓包工具之一,它作为客户端和服务器端之间的代理,记录客户端和服务器之间的所有请求(http/https),可以针对特定的请求过滤,分析请求和响应的数据.设置断点.调试.修改 ...

  4. Nginx + fastcgi + php 的原理与关系

    CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了C ...

  5. 消息中间件——RabbitMQ(八)高级特性全在这里!(下)

    前言 上一篇消息中间件--RabbitMQ(七)高级特性全在这里!(上)中我们介绍了消息如何保障100%的投递成功?,幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费的问题?,Con ...

  6. vue结合element-ui做简单版todolist

    结合element-ui首先需要npm安装element-ui npm i element-ui -S: 然后在入口文件中引入: import ElementUI from 'element-ui'; ...

  7. Spring学习之旅(十一)--JDBC

    JDBC 是数据持久化的一种比较常见的方案,Spring 也对它进行了支持. 在开始 JDBC 的使用之前,我们要先做下一些准备工作. 配置数据源 在 Spring 上下文中可以数据源 Bean 有如 ...

  8. 【原创】为什么Redis集群有16384个槽

    引言 我在<那些年用过的Redis集群架构(含面试解析)>一文里提到过,现在redis集群架构,redis cluster用的会比较多. 如下图所示 对于客户端请求的key,根据公式HAS ...

  9. [C#] 改进SqliteHelper, 减少拼接SQL语句

    说明:开始几个是基本的方法,后面稍微封装了下 public class SqliteHelper { //连接字符串 private static readonly string str = Conf ...

  10. vue实现手机号码的校验(防抖函数的应用场景)

    上一篇博文我们讲到了节流函数的应用场景,我们知道了节流函数可以用在模糊查询.scroller.onresize等场景:今天这篇我们来讲防抖函数的应用场景:: 通过上一篇博文的学习,我们知道了防抖函数的 ...