<if test="deviceNum != null and deviceNum !=''">
AND dev_num = #{deviceNum}
</if>
当参数值为0时会过滤掉,此时应该为
<if test="deviceNum != null ">
AND dev_num = #{deviceNum}
</if>
原因是,<if test="deviceNum != null and deviceNum !=''"> 一般判断的是String类型
mybatis源码中将0和空字符串都转换为了0.0double类型比较导致判断条件为false,从而过滤了0
而实际deviceNum是INTEGER类型,所以不需要判断deviceNum!=‘’