目录
问题重现
先来看我们的例子
我要查出状态为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值
文章讲述了在使用Mybatis时遇到的问题,即当数值参数为0时,Mybatis会将其视为空串,导致动态SQL的条件判断失效。提出了两种解决方案:一是不传数值条件;二是修改条件判断,去掉对空串的判断。问题不仅限于整数,也适用于其他数值类型如长整数、浮点数等。
2817

被折叠的 条评论
为什么被折叠?



