背景
今天在写项目时发现之前写过的一个分页查询功能有bug,订单状态筛选功能失效,从Service层源代码debug终于找到了原因
Bug原因分析
点击查询按钮发现请求正常,状态码返回200,于是进到Service层打断点调试,发现一切都正常,切换不同的订单状态筛选返回到的集合大小不变,于是意识到应该是Dao层动态sql编写出了点问题。sql如下:
其他筛选条件都正常,于是原因锁定在status非空判断这里,查阅相关资料终于知道问题出在哪了,就是这里的"status != ' ' "出了问题。
“坑”描述
在Mybatis中,如果对象是Number类型,当传值为0时status != ' '会被解析成false,否则为true,浮点型0.00也是如此。所以这里直接解析成了false。也就是说Number类型传0时在Mybatis中会被判断为' ',因此只有String类型才需要判断是否!=’’,其他类型完全没有这个必要。
解决方案
将status != ' '删除即可,测试筛选功能恢复正常。