问题来源
今天测试组小姐姐发来一个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和""很细节,把握好细节,避免因小失大。