问题重现 

追溯原因

解决思路

解决方案1:不传数值

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

问题拓展


 

问题重现 

先来看我们的例子

我要查出状态为0的数据

我们的数据为

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

动态sql为

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

单元测试

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

追溯原因

这是因为mybatis对于数值型的参数,如果为0,会当成‘’,也就是空串,所以动态sql的判断条件<if test="status != null and status != ''">不成立,所以sql并没有把状态过滤条件给拼接

解决思路

既然知道了问题,那就好解决了,针对问题数值型0,当成空串‘’,我们可以有2中解决方案

  • 不传数值
  • 条件判断去掉空窜判断

解决方案1:不传数值

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

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

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

问题拓展

上面我们的问题展示的时候,传的是0,默认是int类型,其实其他数值类型也是一样的有这个问题,只要是数值为0的,都有这个问题,比如长整数0L,单精度浮点数0.0f,双精度浮点数0.0d都是一样的,他们的包装类也是一样

下面只演示double类型0值

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

 

 

 

 

 

相关文章:

  • 2022-02-02
  • 2022-12-23
  • 2022-02-20
  • 2022-12-23
  • 2021-08-29
  • 2021-07-15
  • 2022-02-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2022-12-23
  • 2018-06-28
  • 2021-06-28
  • 2022-12-23
相关资源
相似解决方案