Mybatis中关于返回值的问题
结论:
在Mybatis的xml中,可以使用resultType="…",来指定其返回值的类型,但如果sql语句执行的结果为空,则会返回null。
问题描述:
在写Mybatis中的select语句,因为查找的条件,很有可能会找不到符合条件的信息。我原本以为,找不到信息会返回一个空的JSON。但在之后的使用中出现了报错
<select id="Login_Check" parameterType="com.alibaba.fastjson.JSONObject" resultType="com.alibaba.fastjson.JSONObject">
select * from Login where userName=#{userName} and password=#{password}
</select>
原本使用的代码:
jsonObject = loginService.auth(json); //查询出来的结果,返回给controller层
//出现Bug
if (jsonObject.isEmpty()) { //bug位置
jsonObject.fluentPut("code", "601")
.fluentPut("message", "查询无果")
} else {
....
}
后来使用postman测试该接口时,出现500报错
原因是因为非法调用内存。
做一个小的测试
通过try-catch和 if 语句来锁定问题的位置,最终返回的结果为
通过返回的日志,可以了解到,try-catch语句没有出现问题,第一个if语句也成功执行了,着也就意味着json == null。这也就是为什么使用 jsonObject.isEmpty 出现了问题,因为此时的 jsonObject.isEmpty 就等同于 null.isEmpty。这样肯定会出现问题。
因此可以推断出,mybatis如果没有找到返回数据,则会返回一个null,而不是一个空的json。