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中