单引号 vs 双引号:在MyBatis条件判断中的选择困境

哈喽,大家好呀,好久不见!今天是一篇浅记。MyBatis的条件判断中,使用单引号或双引号来判定字符串类型数值的坑…

一、单引号与双引号的区别

在MyBatis的条件判断中,使用单引号或双引号来括起字符串值都是可以的。但是在比较字符串类型的数字时,它们会产生不同的效果。

  • 单引号:使用单引号括起字符串值,比较的是字符的字典顺序,而不是数值的大小。
  • 双引号:使用双引号括起字符串值,会将字符串尝试转换为数值类型进行比较。

这就引发了一个问题:字符串类型数值形式数据如何处理判定呢?单引号就一定不能用吗?

在这里插入图片描述

让我们以一个字段 bpmStatus的条件判断为例,它存储了流程状态的值,以字符串类型的数字表示。需要根据不同的状态值生成不同的 SQL 条件。

<if test="dto.bpmStatus != null and dto.bpmStatus != ''">
 <choose>
  <when test="dto.bpmStatus == '3'">
    AND (a.bpm_status = '4' OR a.bpm_status = '5')
  </when>
  <when test="dto.bpmStatus == '1'">
    AND a.bpm_status = '2'
  </when>
  <when test="dto.bpmStatus == '2'">
    AND a.bpm_status = '3'
  </when>
 </choose>
</if>

乍一看,可能认为这样的写法 “没有问题”,好像觉得 “使用了单引号括起数值字符,它们就是字符串了” 。但是你运行代码后,你会发现条件判断并没有生效,SQL 条件没有被正确拼接!

楼主甚至还傻傻的检查了一下参数定义,主打就是一个纯情:怀疑过代码都没有怀疑过自己…

在这里插入图片描述
没毛病,问题的根源确实在于字符串类型的数字不能这么处理

二、解决方案

为了解决这个问题,我们有两种方案:

方案一:转换数字类型

为了确保条件判断的准确性,建议在比较字符串类型的数字时使用双引号括起字符串值。这样会将字符串尝试转换为数值类型进行比较,得到正确的结果。

<if test="dto.bpmStatus != null and dto.bpmStatus != ''">
 <choose>
  <when test='dto.bpmStatus == "3"'>
    AND (a.bpm_status = '4' OR a.bpm_status = '5')
  </when>
  <when test='dto.bpmStatus == "1"'>
    AND a.bpm_status = '2'
  </when>
  <when test='dto.bpmStatus == "2"'>
    AND a.bpm_status = '3'
  </when>
 </choose>
</if>

方案二:转换字符串类型

如果你希望继续使用单引号括起字符串值,但又需要进行数值比较,可以考虑进行数据类型转换为字符串,也可以实现。

 <if test="dto.bpmStatus != null and dto.bpmStatus != ''">
    <choose>
        <when test="dto.bpmStatus == '3'.toString()">
            AND (a.bpm_status = '4' OR a.bpm_status = '5')
        </when>
        <when test="dto.bpmStatus == '1'.toString()">
            AND a.bpm_status = '2'
        </when>
        <when test="dto.bpmStatus == '2'.toString()">
            AND a.bpm_status = '3'
        </when>
    </choose>
 </if>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/481742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux systemd详解

1、概念 1.1 systemd systemd 是一个用于管理 Linux 系统启动过程和系统服务的系统和服务管理器。它被设计为取代传统的 System V init 系统&#xff0c;提供了更快的启动时间、并行启动服务、更好的日志记录和更强大的管理功能。 1.2 unit Unit 是 systemd 中所有配置文件…

区块链技术下的新篇章:DAPP与消费增值的深度融合

随着区块链技术的持续演进&#xff0c;去中心化应用&#xff08;DAPP&#xff09;正逐渐受到人们的瞩目。DAPP&#xff0c;这种在分布式网络上运行的应用&#xff0c;以其去中心化、安全可靠、透明公开的特性&#xff0c;为用户提供了更为便捷和安全的消费体验。近年来&#xf…

苏州城市学院芮国强一行莅临聚合数据走访调研

3月19日&#xff0c;苏州城市学院校党委书记芮国强、校长赵志宏一行莅临聚合数据&#xff0c;就数据科技赋能行业升级展开调研。聚合数据董事长左磊接待来访。 城市学院党委理论学习中心组一行参观了聚合数据展厅&#xff0c;了解了聚合数据的发展历程、数据产品、应用案例、奖…

能强优品木业:打造高品质混凝土支撑模板,铸就建筑精品

在现代建筑施工中,高质量的混凝土支撑模板是确保工程质量和施工安全的关键所在。贵港市能强优品木业有限公司作为一家专业建筑模板生产厂家,凭借25年的丰富经验和先进的生产工艺,为建筑行业提供了多层板芯、高强度承重、防潮不变形、施工安全抗弯曲性强的优质混凝土支撑模板。 …

day16-环形链表

问题描述&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0…

linux下的打包/解包命令(tar,zip/unzip)

目录 打包/解包 作用 zip -r选项 unzip -d选项 如果不使用递归压缩 -l / -v选项 tar 介绍 选项 示例 打包/解包 作用 使多个文件变成一个文件,不易造成数据缺失使下载时间变短 zip 将目录或文件压缩成zip格式 -r选项 递归式压缩某目录及其所有子目录中的文件 如果不…

【大数据】五、yarn基础

Yarn Yarn 是用来做分布式系统中的资源协调技术 MapReduce 1.x 对于 MapReduce 1.x 的版本上&#xff1a; 由 Client 发起计算请求&#xff0c;Job Tracker 接收请求之后分发给各个TaskTrack进行执行 在这个阶段&#xff0c;资源的管理与请求的计算是集成在 mapreduce 上的…

大模型+强化学习_在线交互调参_GLAM

英文名称: Grounding Large Language Models in Interactive Environments with Online Reinforcement Learning 中文名称: 通过在线强化学习在交互式环境中建立大型语言模型 链接: https://arxiv.org/pdf/2302.02662.pdf 代码: https://github.com/flowersteam/Grounding_LLMs…

Listary 清除无效的搜索历史记录

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 listary 用过一段时间后&#xff0c;搜索其他东西总会显示一个感叹号的之前的文件&#xff0c;强迫症很难受啊。 二、原因分析 猜测是历史记录的问题记录历史搜索的文件没有重建 三、解决方案 提示…

Centos7 搭建openVPN

一、概述 CentOS 搭建openVPN时需要一台有公网IP的服务器。openVPN 是一个基于SSL/TLS的虚拟专用网络&#xff08;VPN&#xff09;&#xff0c;它允许你创建一个安全的连接&#xff0c;通过它你可以将你的网络流量封装并加密&#xff0c;从而在公网上进行传输。 一、搭建证书…

现代白色系装修,打造高级感生活空间。福州中宅装饰,福州装修

玄关 玄关嵌入满墙收纳鞋柜&#xff0c;下方留空15公分作为拖鞋区&#xff0c;中间留出40公分作为随手区 客厅 客厅打通阳台&#xff0c;白色亮面瓷砖通铺&#xff0c;即使不做落地窗设计&#xff0c;室内也是十分明亮 落地电视柜&#xff0c;减少卫生死角&#xff0c;白色整体…

vulnhub prime1通关

目录 环境安装 1.信息收集 收集IP 端口扫描 目录扫描 目录文件扫描 查找参数 打Boss 远程文件读取 木马文件写入 权限提升 方法一 解锁密钥 方法二&#xff1a; linux内核漏洞提权 总结 环境安装 Kali2021.4及其prime靶机 靶机安装&#xff1a;Prime: 1 ~ Vul…

Install Docker

Docker Desktop 直接安装 Docker Desktop Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. Linux下安装Docker CE 参考官方文档 参见阿里云的文档 # step 1…

docker安装WireGuard服务

启动 WireGuard 如下异常 则是linux内核需要升级 $ wg-quick down wg0 $ wg-quick up wg0 Error: WireGuard exited with the error: Cannot find device "wg0" This usually means that your hosts kernel does not support WireGuard!at /app/lib/WireGuard.js:65…

效率加倍 :5 个有助于自动化办公的 Python 工具库

想想你在工作中所做的所有重复性任务。发送电子邮件、创建 Excel 报告、从 PDF 中提取数据、手动进行大量的数据分析工作。 我相信没有人愿意天天重复这样做&#xff0c;但最终&#xff0c;必须有人这样做。有没有更好的解决方案呢&#xff1f; 在本文中&#xff0c;我将向大…

【STL学习】(1)string类

前言 本文将详细讲解STL中string类的常用的接口函数。 一、为什么学习string类&#xff1f; 1、字符串类型的重要性 在现实生活中有很多复杂类型是以字符串来表达的&#xff0c;比如我们在搜索引擎输入的“数据”&#xff0c;一个人的姓名、身份证号等等。 所以字符串类型是很…

康奋威科技邀您到场参观2024长三角快递物流展

参展企业介绍 杭州康奋威科技股份有限公司创立于2005年&#xff0c;由国家“万人计划”专家任天挺先生创立并担任法人&#xff0c;是一家专业从事智能装备研发与制造的国家级高新技术企业。专注于自动化控制、机械设计、信息化方面的技术研究&#xff0c;主要为太阳能光伏、智…

一篇文章让你完全掌握使用Git推送代码到新版GitCode

Git推送代码到新版GitCode 前言一、安装git二、tortoise git的安装2.1 关于tortoise git2.2 tortoise git和tortoise git汉语包的下载2.3安装过程2.4配置tortoise git 三、创建GitCode项目关于READM文件关于.gitignore文件关于LICENS文件 四、配置GitCode和Git4.1克隆项目4.2配…

【十二】【算法分析与设计】滑动窗口(3)

30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff…

【Godot 3.5控件】用TextureProgress制作血条

说明 本文写自2022年11月13日-14日&#xff0c;内容基于Godot3.5。后续可能会进行向4.2版本的转化。 概述 之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat&#xff0c;好处是它几乎可以算是矢量的&#xff0c;体积小&#xff0c;所有东西都是样式信息&am…