问题描述
首先是mybatis进行一对一的查询时,如果无结果会报错,但是有时候我们的业务场景不想要报错而是让他返回null在进行判断
问题展现:
比如这样
但是显然实现不了,对于mybatis而言要么返回一个对象,要么报错,
在不对框架动手的情况下,目前百度到了一个解决办法,
解决办法
修改sql语句
<select id="login" parameterType="String" resultMap="baseResultMap">
SELECT id,username,password,nickname,role_id,available ,salt FROM admin_user
WHERE username = #{username}
</select>
修改为
<select id="login" parameterType="String" resultMap="baseResultMap">
<!-- IFNULL(MAX( id ),0) 用来防止mybatis查询查不到结果时报错的问题 -->
SELECT IFNULL(MAX( id ),0) AS id,username,password,nickname,role_id,available ,salt FROM admin_user
WHERE username = #{username}
</select>
IFNULL(MAX( id ),0) AS id
这一句判断id是不是等于Null,如果是null,就写为0这样就有值了
这样子如果没查到结果
我们会得到
user对象为
AdminUser(id=0, username=null, nickname=null, password=null, roleId=null, available=null, createtime=null, salt=null)
虽然我们不能对整个user对象判空,但是可以对use中除了id的字段判空,或者判断id是不是等于0来判断有没有这个用户