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 @ 2022-07-24 13:33  YURainnn  阅读(920)  评论(0)    收藏  举报