今天工作中发现一个Long类型的参数没有传到sql中去,在sql xml配置文件中是使用if test标签判断:
<if test="version != null and version != ''">xxxxx</if>
通过debug发现参数中的version是有值的,但出来的sql语句就没有这个version
网上查了一些有不少同样这样的问题,大致解决办法分两种:
1、去掉空字符串判断
<if test="version != null">xxxxx</if>
2、添加0值判断
<if test="version != null and version != '' or version == 0">xxxxx</if>
这两种方法都是可以的,在我看来是这样,如果这个version类型和我的情况一样,是包装类型而不是基本数据类型的话,第一种就足够了,而且更贴近实际,因为包装类型除了有值的情况就是null,不会为""空字符串的,String类型不在我讨论的范围内,标题已经说了是数字0,况且如果是String的话就不会有这个问题了。
mybatis源码中,会把 0 和 空字符串都转成 0.00,
所以当<if test=" xxx=0 ">时,mybatis默认会把0等价于空字符串,所以不会生效
尽量避免使用 0 作为参数