mybatis if判断两个值是否相等存在的坑啊
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判断两个值是否相等存在的坑啊的更多相关文章
- C标签判断两个值是否相等
c标签判断两个值是否相等 Integer用:${user1.id eq user2.id}:int用:${user1.id == user2.id} 测试代码如下:<c:if test=&quo ...
- C语言判断两个值相等
内置类型比较直接用==判断 字符串比较要用string.h里的函数strcmp(const char *str1,const char *str2)进行比较string.h里的函数strcmp(con ...
- mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样
Mybatis批量更新数据 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批 ...
- 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更
java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...
- mybatis 中的 update 返回值
摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...
- 【跟着子迟品 underscore】JavaScript 中如何判断两个元素是否 "相同"
Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...
- java integer对象判断两个数字是否相等
java integer对象判断两个数字是否相等,不一定对 问题发生的背景:javaweb的项目,起先,因为在java中实体类中的int类型在对象初始化之后会给int类型的数据默认赋值为0,这样在很多 ...
- 判断两个IP是否属于同一子网
描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据.子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”.利用子网掩码可以判断两台主机是否 ...
- 实验12:Problem D: 判断两个圆之间的关系
Home Web Board ProblemSet Standing Status Statistics Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 T ...
随机推荐
- 源码编译OpenJdk 8,Netbeans调试Java原子类在JVM中的实现(Ubuntu 16.04)
一.前言 前一阵子比较好奇,想看到底层(虚拟机.汇编)怎么实现的java 并发那块. volatile是在汇编里加了lock前缀,因为volatile可以通过查看JIT编译器的汇编代码来看. 但是原子 ...
- Unity进阶之ET网络游戏开发框架 06-游客登录
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- python3虚拟环境中解决 ModuleNotFoundError: No module named '_ssl'
前提是已经安装了openssl 问题 当我在python3虚拟环境中导入ssl模块时报错,报错如下: (py3) [root@localhost Python-3.6.3]# python3 Pyth ...
- 由group by引发的sql_mode的学习
前言 在一次使用group by查询数据库时,遇到了问题.下面先搭建环境,然后让问题复现,最后分析问题. 一 问题复现 mysql版本 建表插入数据 表的结构 现在问题来了:我想查询上面表中每个部门年 ...
- go 学习笔记之go是不是面向对象语言是否支持面对对象编程?
面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对 ...
- 10.源码分析---SOFARPC内置链路追踪SOFATRACER是怎么做的?
SOFARPC源码解析系列: 1. 源码分析---SOFARPC可扩展的机制SPI 2. 源码分析---SOFARPC客户端服务引用 3. 源码分析---SOFARPC客户端服务调用 4. 源码分析- ...
- 漏洞挖掘技巧之利用javascript:
好久没更新博客了,更新一波. 场景: window.location.href=”” location=”” location.href=”” window.location.* 常见地点:任何二次跳 ...
- Java网络编程之URL和URI
Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...
- MapDB使用入门
背景 MapDB官网:http://www.mapdb.org 官方翻译之后的话:MapDB基于堆外存储.磁盘存储提供了Java的Maps.Sets.Lists.Queues等功能.它混合了Java集 ...
- Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)
Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩 ...