mybatis框架针对字符串的null和““的传参带来的不可预测的隐含的问题
2023-09-27 14:25:29 时间
问题来源
今天测试组小姐姐发来一个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和""很细节,把握好细节,避免因小失大。
相关文章
- SSM(Spring+SpringMVC+Mybatis)极简整合完整示例(结构清晰三大框架仅需一个xml配置文件!)
- MyBatis学习总结
- mybatis报错:cannot resolve symbol 无法解析
- springboot整合springsecurity以及mybatis-plus详解
- 使用mybatis插入自增主键ID的数据后返回自增的ID
- mybatis参数为0识别为空字符串的查询处理
- 持久层框架JPA与Mybatis该如何选型
- 《Java EE核心框架实战》—— 第2章 MyBatis 3常用技能
- 基于 Java(MyBatis框架) 的学生选课管理系统【100010217】
- springboot + mybatis +easyUI整合案例
- 想做时间管理大师?你可以试试Mybatis Plus代码生成器
- mybatis或hibernate框架连接数据库报错:java.sql.SQLException: No suitable driver或com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask无法实例化datasource
- mybatis或hibernate框架连接数据库报错:java.sql.SQLException: No suitable driver或No suitable driver found for http://maven.apache.org
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- mybatis @Select注解中如何拼写动态sql
- SSM框架基础整理---MyBatis
- 【MyBatis】整合spring、springMVC、MyBatis框架
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 关于mybatis里面的Executor--转载
- Mybatis的Mapper接口方法不能重载