Mybatis plus 动态sql判断integer条件时语句不拼接不执行的问题
问题重现:
需要查询带2个条件的语句
在where if标签中,判断2个条件的值是否为null或空,拼接当前条件到sql语句中
因为isReturn 在这个查询逻辑中是必查的
传参,设定的当前参数值为0
pageParam.put("isNetstore",0);
pageParam.put("isReturn",0);
PageInfo<List> pageInfo = orderService.findAllOrder(pageParam);
sql
<sql>
<where>
<if test="isReturn != null and isReturn != ''">
and is_return = #{isReturn}
</if>
</where>
</sql>
出现的问题(数据库中,符合条件的数据只有7条,数据总条数为11条)
sql语句不拼接
==> Preparing: SELECT COUNT(*) FROM orders
==> Parameters:
<== Columns: COUNT(*)
<== Row: 11
<== Total: 1
刚开始以为是参数对象的指向问题,后来排除
尝试解决时,将值换成了String形式
==>Preparing: SELECT COUNT(*) FROM orders WHERE is_netstore = ? AND is_return = ?
==> Parameters: 0(String), 0(String)
<==Columns: COUNT(*)
<== Row: 7
<==Total: 1
SQL语句拼接了
xml文件中的动态sql没有问题,回到integer 参数 和String 参数的问题上
我要添加的条件的值都为0,经过百度,发现
当动态sql判断的integer参数为0时,mybatis会将此参数默认为“空串”,因此不会if判断不会识别到,所以条件就不会拼接到sql中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?