原因看一下Sqlsession中selectOne源码就知道了:
这个方法会去调用selectList,很简单的,如果得到0条则返回null,得到1条则返回1条,得到多条报TooManyResultsException错
特别需要注意的是当没有查询到结果的时候就会返回null。因此一般建议在mapper中编写resultType的时候使用包装类型,而不是基本类型,比如推荐使用Integer而不是int。这样就可以避免NPE
但是有某些特殊情况,可以直接返回基础数据类型,比如查询记录条数啥的,查不到时,返回结果为0,不会出现查询结果为空的情况,所以不会出现NPE。