问题重现
先来看我们的例子
我要查出状态为0的数据
我们的数据为
动态sql为
单元测试
追溯原因
这是因为mybatis对于数值型的参数,如果为0,会当成‘’,也就是空串,所以动态sql的判断条件<if test="status != null and status != ''">不成立,所以sql并没有把状态过滤条件给拼接
解决思路
既然知道了问题,那就好解决了,针对问题数值型0,当成空串‘’,我们可以有2中解决方案
- 不传数值
- 条件判断去掉空窜判断
解决方案1:不传数值
解决方案2:条件判断去掉空窜判断
问题拓展
上面我们的问题展示的时候,传的是0,默认是int类型,其实其他数值类型也是一样的有这个问题,只要是数值为0的,都有这个问题,比如长整数0L,单精度浮点数0.0f,双精度浮点数0.0d都是一样的,他们的包装类也是一样
下面只演示double类型0值