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中

posted @   YURainnn  阅读(866)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示