引起空指针异常的sql语句:
select d.VALUEE as name, aqu.id, aqu.state, aqu.issue, aqu.start_time,
aqu.end_time,aqu.long_term, aqu.issue_authority, aqu.remark, aqu.attachments
from aqjy_access_config aac
left join aqjy_config_user acu on aac.id = acu.config_id
left join aqjy_qualification_user aqu on aac.access_bind_id = aqu.dict_id and acu.user_id = aqu.user_id
left join t_dict d on aac.access_bind_id = d.DICT_ID
where aac.access_bind_type = 'qualification'
and
aac.access_id = 1
and
aac.config_type = 'laboratory'
and
acu.user_id = 3
在navicat中执行语句得到的结果:
正常来说查询数据时没有对应的数据就返回null,为什么这里却报了空指针异常呢?
将sql语句修改一下就能发现问题
select *
from aqjy_access_config aac
left join aqjy_config_user acu on aac.id = acu.config_id
left join aqjy_qualification_user aqu on aac.access_bind_id = aqu.dict_id and acu.user_id = aqu.user_id
left join t_dict d on aac.access_bind_id = d.DICT_ID
where aac.access_bind_type = 'qualification'
and
aac.access_id = 1
and
aac.config_type = 'laboratory'
and
acu.user_id = 3
在navicat中执行语句得到的部分结果:
可以得知实际是有数据的,但是由于我们获取字段时获取到的都是值为null的字段,如果返回对象数据为null,用户会以为没有对应条件的数据,但是实际是有的,所以mybatis为了防止出现歧义,不允许出现这种情况,会抛出空指针异常。