mybatis使用Integer类型查询可能出现的问题
作者:ypp91zr 发布时间:2022-09-01 12:47:38
标签:mybatis,Integer,查询
使用Integer类型查询出现的问题
mapper.xml :
<select id="count" parameterType="com.pinyu.system.web.page.Page" resultType="java.lang.Integer">
select count(m.id) from hr_push_msg_model as m
<where>
<if test="page.keyword != null and page.keyword != ''">
m.text like '%${page.keyword}%'
</if>
<if test="page.entity != null">
<if test="page.entity.text != null and page.entity.text != ''">
and m.text like '%${page.entity.text}%'
</if>
<if test="page.entity.title != null and page.entity.title != ''">
and m.title like '%${page.entity.title}%'
</if>
<if test="page.entity.state != null and page.entity.state != ''">
and m.state = #{page.entity.state}
</if>
<if test="page.entity.type != null and page.entity.type != ''">
and m.type = #{page.entity.type}
</if>
</if>
</where>
</select>
比如:
<if test="page.entity.state != null and page.entity.state != ''">
and m.state = #{page.entity.state}
</if>
当state这个值为0的时候
mybatis为默认为空字符串"",所以如果状态这种类似的场景有0值得,查询就不要加上xxxx!=""这种。或者or xxx==0
代码示例:
1、
<if test="page.entity.state != null">
and m.state = #{page.entity.state}
</if>
2、
<if test="page.entity.state != null and page.entity.state != '' or page.entity.state==0">
and m.state = #{page.entity.state}
</if>
mybatis判断Integer遇到的bug
场景产出
需要查出状态为0的所有用户
我是这样写的
1.mapper:
BaseUser selectUserByStatus(@parm("status") Integer status);
这里传了0进去
2.sql:
SELECT * FROM base_user WHERE status=0
3.xml片段
<if test="status != null and status != ''">
status = #{status},
</if>
4.结果真正执行的sql
SELECT * FROM base_user
小结一下:
test="status != null and status != ''"这个是拿来判断String的!!!也就是说Double,BigDecimal等数字类型也会出现这样的情况
1.如果是Integer类型的话,如果变量的值是0,即 num = 0, mybatis在进行 num != '' " 的时候会认为 num 的值是空字符串;直接跳过判断了
所以如果是Integer类型只需要判断 != null 即可
2.如果String类型需要判断不等于0,则需要写name != '0'.toString(),否则会报错。
来源:https://blog.csdn.net/ypp91zr/article/details/84581161


猜你喜欢
- 今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下: &nbs
- 首先我们如果要使用Java中存在的包,可以程序中使用import语句导入包。包说通俗点就是一个文件夹,为了方便管理。在程序中声明包的语法:p
- Aop什么是Aop?AOP就是面向切面编程,通过预编译方式以及运行期间的 * 技术来实现程序的统一维护功能。什么是切面,我理解的切面就是两
- springboot项目还是ssm等java常用框架都会有这样的问题,解决办法通用问题场景前端发送Post请求,前端返回400 Bad Re
- 本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下通过Microsoft.Office.Interop.Word生
- 前言最近因为项目组需求,特研究了一下“回到顶部”效果,即:页面里有scrollview,内容很多,当滑动到页面下面或者更深时,需要回到顶部,
- Filter过滤器和Listener * 详解Filter过滤器Filter的简介 对资源的访问进行过滤,相当于小区的保安,进去
- 前言Spring Seuciry相关的内容看了实在是太多了,但总觉得还是理解地不够巩固,还是需要靠知识输出做巩固。相关版本:java: jd
- 前言java8借鉴了第三方日期库joda很多的优点java.time包类名描述Instant时间戳Duration持续时间,时间差Local
- object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和
- 本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。形参出现在函数定义中,在整个函数体内都可以使用, 离开该
- 1.背景在项目中有些敏感信息不能直接展示,比如客户手机号、身份证、车牌号等信息,展示时均需要进行数据脱敏,防止泄露客户隐私。脱敏即是对数据的
- 如何查看 Java 的字节码文件?在 Java 中,字节码文件.class实际上是二进制文件,并不能直接查看。要想查看,我们只能通过反编译对
- 本文实例为大家分享了Unity实现手势识别的具体代码,供大家参考,具体内容如下代码很简单没有难度,都有注解,随便 看一看 就会了。
- 本文为大家分享了如何使用eclipse创建java项目,供大家参考,具体内容如下首先,打开Eclipse,在工具栏依次点击【File】>
- 时间戳在游戏开发中虽然是一个比较小的功能?但是如果缺少这个功能就会导致开发遇到困难,为了帮助大家开发,下面就给大家介绍下将时间戳的使用方法,
- 好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了。这次就跟着之前的问题,继续总结下Spring MVC中的小知识。u
- 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的
- 定义 1、如果注解中有属性,那么必须给属性赋值。package com.lxc.Test;// 定义一个注解public @int
- 目录效果展示实现原理实现步骤完整代码展示效果展示实现原理首先需要生成绘制小花的坐标点,坐标点的横坐标是根据控件的宽度随机生成的,而纵坐标则设