在mybatis的xml中,当Integer为0的时候判断不生效

Spring Boot + MyBatis项目里,Integer参数传0为啥被当成空字符串? 本文深入分析了Spring Boot + MyBatis项目中Integer参数0被误判为空字符串的问题根源,揭示了MyBatis动态SQL中OGNL表达式的类型转换机制,并提供了多种解决方案,包括简化判断条件、使用类型明确的判断方式以及自定义类型处理器等,帮助开发者避免这一常见陷阱。 阅读详情

问题描述

在mybatis的xml中,当Integer为0的时候判断不生效,例如:

    <if test="type != null and type != ''">
      and type = #{type}
    </if>

原因分析:

mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于’‘时,例如type != ‘’,OGNL会返回’'的长度,源码:(s.length() == 0) ? 0.0 : Double.parseDouble( s ),因此表达式type != ''被当做type != 0来判断,所以当type为0时,if条件判断不通过。


解决方案:

根据业务逻辑判断,如果只需要判断为空的情况的话,只需要判断 type != null,如果必须要判断此参数为0的情况,就需要修改为 type != null and type != 0

参考资料: https://blog.youkuaiyun.com/qq_30038111/article/details/82665763

利用Matlab绘制非线性系统相图:从理论到实践 本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。 阅读详情

相关推荐

Lumerical FDTD新手教程:5步搞定MMI波导光谱模拟(附避坑指南)

本文提供Lumerical FDTD新手教程,详细讲解5步完成MMI波导光谱模拟的实用方法,包括环境准备、结构建模、光源配置、仿真优化和结果分析。特别针对多模干涉耦合器(MMI)的模拟难点,提供避坑指南和优化策略,帮助光学工程师快速掌握FDTD仿真技术。

kite3的博客 359

Integer != 0(Integer为NULL时NullPointerException的问题)

原因:Integer是int的包装类,在与int做条件判断时,Integer会进行拆箱(转化为int),此时如果Integer为null就会出现NullPointerException ————————————包括其他基本数据类型也是如此 因此在使用基本数据类型的包装类与基本数据类型做条件判断时,一定要先判断该包装类是否为NULL ...

zlc147的博客 6621

门控时钟(clock gating)的DFT设计

在数字IC芯片中,时钟树的功耗占比可能高达30%,因此一般会采取门控时钟的方式来降低该部分的功耗。所谓门控时钟,就是在芯片实际工作过程中,有些信号或者功能并不需要一直开启,那么就可以在它们不用的时候将其时钟信号关闭。这样一来信号不再翻转,从而能够有效减少动态功耗。 目前门控时钟都采用集成门控时钟单元(ICG,integrated clock gating cell),其结构如下。由一个latch和一个与门(也有的是或门)组成,可以过滤掉EN信号中的毛刺。一般的工艺库中都会有专门的ICG以供调用。 插入IC

weixin_44746697的博客 3878

jdk源码学习笔记---Integer

jdk Integer类的源码分析

alw_123的博客 1516

基于Transformer模型实现交通流量时序预测(PyTorch版)

Transformer模型,作为一种基于自注意力机制的深度学习模型,最初在自然语言处理领域取得了突破性进展,其出色的长距离依赖关系捕捉能力使其在处理时序数据时也表现出色。将Transformer模型应用于交通流量时序预测,可以充分利用其优势,实现对交通流量更加精准、高效的预测。

时序笔记 2574

RHCA ---RH442-4

这题考试中是没有的,但我做ex的判分脚本里做了,主要是lab环境swap只有512M的,这样后续改了某几个参数后会造成内存不够用导致异常.这里记得是双>,如果没自信的小伙伴可以在考试开始后第一时间把/etc/fstab先备份一个或者vi进入后手动敲一下。根据题意我们需要分2个768M的分区给swap。用free看swap大小是2.0Gi即可。留意红框中的内容即可,最后w保存退出。这个时候可以重启下机器。

Q先生 648

mybaits 踩过的坑 ,if判断如果类型是integer类型,值为0,判断条件不成立

如果 auditStatus 是 integer 类型 且等于 0 那么 判断条件会不成立 直接跳过 解决 方案 1 修改类型为 int 方案 2 给 if 多加一个 or 判断 如图:

HaoYu1098的博客 536

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上)

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上):慢时钟域到快时钟域!

悟已往之不谏 知来者之可追 1547

解决Mybatis的xml层if标签Integer类型的判断失效

正确代码参考: 我传递的keyword 还有type都是String类型的。status是Integer类型的,传的值是0。 <select id="selectData" resultType="com.susu.demo.Test"> SELECT t.id, t.nam FROM test t WHERE 1=1 <if test="keyword != null an

susu1083018911的博客 2558

RandLA-Net Tensorrt 推理 c++

RandLA-Net 实现 Tensorrt 部署.

J。 1112

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7969

Java的Integer类

1.用途 包装一个对象中的原始类型int的值,封装基本数据类型 int ,将字符串转成基本数据类型 int。 2.特点 类型为Integer的对象包含一个单一字段,其类型为int 。此外,该类还提供了一些将int转换为String和String转换为int ,以及在处理int时有用的其他常量和方法。有构造方法。 3.基本字段 (1)MIN-VALUE public static final int...

qiqi_miao的博客 2344

ASPICE标准快速掌握「1.1. 简介」

ASPICE是汽车软件过程改进能力模型(Automotive SPICE,Automotive - Software Process Improvement and Capability dEtermination)的缩写,是一种针对汽车软件开发过程的国际标准。该标准旨在帮助汽车制造商和供应商改进其软件开发过程,以确保其软件产品的质量和安全性。需要做什么为什么要做技术上的依赖性是什么。

雪云飞星的博客 2294

mybatis传入Integer类型的参数,当参数为0时,发现直接被过滤,问题解决

mybatis传入Integer类型的参数,当参数为0是,会被看做空字符串,所以不能空值判断不能用 !=”“ 之前是这么写的 <sql id="where_condition"> <where> 1=1 <if test="isComplaint != null and isComplaint=''"> and is_complaint = #{isComplaint} <

非著名程序猿 900

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MyBatis 踩坑:数字 0 传入后 if 判断失效,更新字段不生效问题解析

本文分析了MyBatis动态SQL中数值0更新失效问题。当使用<if test="newQuantity != null and newQuantity != ''">判断时,OGNL表达式会认为0等于空字符串,导致数值0被过滤。核心原因是数值字段错误混用了字符串判空逻辑。 解决方案: 推荐方案:数值字段仅保留!= null判断,删除!= ''条件 特殊场景:如需兼容字符串可增加or newQuantity == 0条件 规范建议: 字符串字段需双重判空(!= null and != '') 数值字段仅需判

慢慢 322

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何解决mybatis在xml中传入Integer整型参数为0时查询条件失效问题?【亲测有效】

今天遇到个问题,接口入参Integer类型,mybatis传入0老是显示没传入参数,传入其他1,2等值正常; **解决办法:** **1. 传参有Integer改成String 2. 去掉mybatis中 做法:去掉【status != ''】 的这条非空判断**

qq_40985985的博客 855

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MyBatis XML中if标签误判MyBatis XML中if标签误判:OGNL类型转换陷阱导致0参数条件过滤

最近用MyBatis编写动态SQL时遇到一个诡异的问题,参数ifBind传0时条件不生效,但是传其他任何数字都没问题=_=我的传参ifBind是Interger类型的,ifBind为0时理论上要生成mysql条件AND d.if_bind = 0。打断点发现Interger 类型的ifBind是正常传入的0,但到SQL生成时条件就消失了,传其他的数字确可以拼接上条件。后来查了一下MyBatis 的<if>标签使用的是表达式语言来解析test条件。当 OGNL 在比较一个和一个时,它会尝试进行。

m0_53608729的博客 797

mybatis 传入Integer类型0时导致参数丢失

场景: 数据表里面有一个整型字段 type,参数为 0 或者 1,使用 mybatis 的 xml 文件写 sql 时发现传参为0时不起作用。 1.部分代码 <if test="userType != null and userType != ''"> AND s.`type` = #{userType} </if> 大家一般也都是上面的写法,但是 userType 被声明为 Integer传参为 0 时,userType

清泉影月 1409

MYBATIS中进行判断字段是否等于0未生效原因解析

MYBATIS中进行判断字段是否等于0未生效

大小先生 1188

如何解决在xml中传入Integer整型参数为0时条件失效问题?

在MyBatis更新语句中,当Integer类型参数为0时会被转为空字符串,导致if标签条件判断失效(如andeffectStatus!=''),引发更新异常。解决方案是移除if标签中对空字符串的判断条件,仅保留andeffectStatus!=null即可正常执行更新操作。该问题与数据库可视化工具中查询0和空字符串结果相同的现象具有关联性

weixin_44825912的博客 226

MyBatis 真坑!Integer 类型赋值 0 ,当 != '' 时无法通过判断执行 SQL 语句

>>号外:关注“Java精选”公众号,回复“2021面试题”关键词,领取全套500多份Java面试题文件。开发微信小程序“Java精选面试题”后台管理系统时,遇到根据状态判断是...

Java精选 1163

mybatis 数字字符串 排序/传入为0的值不生效

** 传入为0的值不生效 ** 此处 isFiled 是Integer 类型 <if test="isFiled != null and isFiled != ''"> AND r.is_filed =#{isFiled} </if> 在MyBatis中自动判断Integer为0时为false,即isActived == ‘’。所以这个判断就不生效了。 只需将字...

qq_24057133的博客 623

mybatis动态sql根据java中Integer判断不执行otherwise,解决办法

解决办法,不使用Integer字段,使用string类型字段; private Integer type; mapper文件: <choose> <when test="type == 1"> 1 </when> ...

欧菲丽的博客 689

free mybatis 不生效_Mybatis非空判断没有生效

使用mybatis updateByPrimaryKeySelective方法来更新语句,但是null值也传过去了。Mapper.xmlupdate zzbizorder_#{tableIndex}clickid = #{record.clickid,jdbcType=BIGINT},clickid = #{record.xxxx,jdbcType=BIGINT},clickid = #{reco...

weixin_39546661的博客 230

前端传参某字段值为0,但 mybatis 执行 sql 并没有将其当作条件

本人采用第一种方法,调整 XML 重新运行后,问题解决。然而实际执行的 SQL 并没有根据。原因:在mybatis中,参数类型。postman测试传递的参数。,后端的实体对象也确实拿到了。, mybatis在处理时。(本人尝试过,前端请求参数。(也就是制为空,例如。

ZYLxglc99的博客 274

bug记录 - Long和Integer为0时,mybatis识别为空的问题

这段时间遇到一个比较奇葩的bug 实体属性设置为封装类型Long,在使用它为mybatis的xml文件中获取参数时,由于加了一个if对属性的非空判断,就出现了这个奇葩bug xml代码如下 select * from crm <where> <if test="projectStatus != null and projectStatus != '' ">and crm_status = #{projectStatus}</if> </where>

c_o_d_e_的博客 1292
上一篇: vue2.0中对sessionStorage和localstorage的操作
下一篇: mysql 修改表的字符集和排序规则
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫猫猫猫猫猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值