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

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决mybatis在xml中传入Integer整型参数为0时查询条件失效问题?亲测有效相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

一、前言🔥

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

演示环境:idea2019.3 + springboot 2.3.1REALSE + mysql5.6 + jdk1.8

二、摘要 🔥

        给大家看个很匪夷所思的bug!sql执行逻辑也很简单,使用if test判断,如果前端传的参数有对应的test字段,则将其加入到判断条件中,但是运行结果差强人意。

看下控制台sql打印:

具体看执行sql的后半段,明显是没有拼接auditorStatus 这个字段条件?

我给大家看下我自定义xml中真正执行的sql语句。

先请大家见晓:

<if test="model.auditorStatus != null and model.auditorStatus != '' ">
    and a.audit_state = #model.auditorStatus
</if>

判断该字段值如果不为null或者不等于' ',就进行该sql 字段条件拼接。

完整截图如下: 

        我害怕是判断有问题,把auditorStatus 给过滤掉了,于是我再做个测试,我将auditorStatus 值改为1或别的值(除0外),sql竟能成功拼接该auditorStatus 字段。一脸懵b!我???

        此时看控制台执行的sql,auditorStatus = 1是被where 条件成功拼接上,最后返回的结果数也是准确无误的。

         字段赋值0就不行,这是为啥啊???见鬼了?

三、问题排查🔥

        后端用Integer接收的0传入 以model.auditorStatus 这一步进行取值,现在有两种情况,要么值没传进去被判空false,要么if判断 auditorStatus 有值但执行内部逻辑判断时出了问题,前者肯定可以排除,那就只剩后者了,花了一刻钟,查阅相关源码资料才发现model.auditorStatus != '' 执行结果竟然真的为false,0 != '',这明显为true啊。但是啊底层源码执行却不是简单的是0 与 ''的判断,而是会默认将""和 0 都转换成double进行比较 都是0.0,这也就是为什么 auditorStatus为0却判断auditorStatus != ' ' 会返回false。有空的同学可以重点去研究研究哈。

        所以接下来,你们所关心的重点来了,如何去解决这种问题呢?

四、解决方案🔥

1️⃣方案1

        做法:不用Integer接收,使用String类型接收。

2️⃣方案2

        做法:去掉【model.auditorStatus!= ''】 的这条非空判断.

        而我是直接采取了方式2,如下是去除model.auditorStatus!= ''这条判断后,model.auditorStatus = 0的情况下,sql也是正常拼接 auditorStatus 这个字段条件。

         如下是我修改后再次调用接口debug,给大家看一眼,参数值是否有被 拿到,我这里也是直接定义为0. 

如下 是控制台sql打印,大家可以看下: 

        最后结果返回条数也是正确的,很明显是这一改是没有问题的。大家也可以自行测试一下。  

... .... 

        好啦,以上就是这期的全部内容啦,如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。

五、文末🔥

        如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《bug调优》,都是我一手打下的江山,持续更新中,希望能帮助到更多小伙伴们。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

最后送大家两句话,与诸君共勉!


☘️做你自己想做的人,没有时间限制,只要愿意,什么时候都可以开始。

🍀你能从现在开始改变,也可以一成不变;这件事,没有规矩可言,你可以活出最精彩的自己。


​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于如何解决mybatis在xml中传入Integer整型参数为0时查询条件失效问题?亲测有效的主要内容,如果未能解决你的问题,请参考以下文章

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

mybatis传入listarray等数据集合的处理

Mybatis传入参数为map

如何在xml中传入list参数

Mybatis判断Integer失效

mybatis如何传入java中拼接的sql语句