问题来源
今天测试组小姐姐发来一个bug,bug的原因如下:
【备注,必要信息打码】
在设备列表的查询条件中,她通过设备Id去筛选当前设备,查询到之后将输入框的设备Id设置为空,按道理说应该是查询全部的设备,但查询为空,如图所示
于是,打开Chrome的控制台,发现设备Id置空后的传参是这样的:
设备Id有值,但是为空值,这个空值不是null,于是,使用postman来测试 "" 和null
的区别.
-
deviceId = ""
时的查询结果
-
deviceId = null
时的查询结果
结论
在Java中,null值该变量不指向任务对象的引用【指针】,””表示指向空数据的引用,这个空数据有地址,但是没有数据。
因而,针对字符串的判断,需要加个判断,字符串的长度需大于0,避免空字符串的带来的问题。
//原始的SQL语句
<if test=" virtualId != null ">
and virtualId = #{virtualId}
</if>
转化后的SQL语句为:
select * from table_name where virtualId ='';
//修改后的SQL语句
<if test=" virtualId != null and virtualId.length >0 ">
and virtualId = #{virtualId}
</if>
转化后的SQL语句为:
select * from table_name;
备注
Java中的null和””很细节,把握好细节,避免因小失大。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99224.html