<if test="id != null and id != ''"> and id=#{id}</if> 如果id=0,则这个条件不会拼接。 不是0,则没有问题。 ---------------------------------------- mybatis会比较表达式: (1)id!=null,这个没毛病,是true (2)id!='',id是0,它和空串怎么比较呢? debug了半天,有这样的代码:
protected Object getValueBody(OgnlContext context, Object source) throws OgnlException { Object v1 = super.children[0].getValue(context, source); Object v2 = super.children[1].getValue(context, source); return OgnlOps.equal(v1, v2) ? Boolean.FALSE : Boolean.TRUE; }
OgnlOps.equal()里面比较了半天,最后把两边都转成数字进行比较了。 空串变成了0,所以0!='',是false,所以整个表达式是false,所以条件不拼接。 ---------------------------------------- 如果id不是0,比如是88,那么88!=0,是true,所以条件拼接。 ---------------------------------------- 解决办法:只留id!=null即可。
|