当前位置: 首页 > java >正文

【容易坑】mybatis中使用if标签比较两个字符串是否相等

资料都来自于网络,这里只是记录一下,仅供参考

现象

上传参数确实为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中判断字符串是否相等,请使用 方法一 或 方法二。

参考:

Mybatis踩坑记录——if从句中的赋值乌龙_mybatise中if判断语句可以有两个变量不-CSDN博客

mybatis xml文件中用 if 标签判断字符串是否相等 - r1-12king - 博客园

http://www.xdnf.cn/news/7818.html

相关文章:

  • SpringBoot微服务编写Dockerfile流程及问题汇总
  • Burp Suite返回中文乱码?
  • 使用 Spring AI Alibaba 集成阿里云百炼大模型应用
  • 计算机网络学习(一)—— OSI vs TCP/IP网络模型
  • 在局域网(LAN)中查看设备的 IP 地址
  • 网络:如何通过已知的电脑的机器名(计算机名),获取ip地址
  • C++线程池实现
  • jenkins数据备份
  • 程序代码篇---Python处理ESP32-S3-cam视频流
  • ROS2学习(8)------ROS2 服务说明
  • ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器
  • 线性表数据结构-堆栈
  • 网络安全之APP渗透测试总结
  • Vue3 组件之间传值
  • React深度解析:Hooks体系与Redux Toolkit现代状态管理实践
  • linux 学习之位图(bitmap)数据结构
  • 宝塔安装的 MySQL 无法连接的情况及解决方案
  • StepX-Edit:一个通用图像编辑框架——论文阅读笔记
  • 计算机网络相关面试题
  • 安全可控的AI底座:灯塔大模型应用开发平台全面实现国产信创兼容适配认证
  • 数据被泄露了怎么办?
  • 视觉生成新突破!仅0.5B参数,SimpleAR解锁预训练、SFT、RL全能模式
  • 【MC】红石比较器
  • Spring Boot 项目中 Redis 存储 Session 对象序列化处理
  • 面向未来,遨游推出5G-A智能防爆对讲机等系列终端
  • Qt功能区:Ribbon控件
  • BEVDet
  • opencv_version_win32
  • Leetcode-2 最小偶倍数
  • pikachu靶场 暴力破解