Mybatis动态传参数值为0时,条件无效的问题

问题重现 

追溯原因

解决思路

解决方案1:不传数值

解决方案2:条件判断去掉空窜判断

问题拓展


问题重现 

先来看我们的例子

我要查出状态为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值

猜你喜欢

转载自blog.csdn.net/lgl782519197/article/details/109275996