标签:查询 NullPointerException sqlSession user Mybatis null DBAccess selectOne User
为什么selectOne会报空指针异常?又如何解决?
假设有如下方法:
public User selectUserByUsername(String username){
DBAccess dbAccess = new DBAccess();//DBAccess是用于获取sqlSession的类
SqlSession sqlSession = null;
try {
User user = new User();
sqlSession = dbAccess.getSqlSession();
user = sqlSession.selectOne("User.selectUserByUsername", username);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(sqlSession != null){
sqlSession.close();
}
}
return user;
}
上述代码在进行查询的时候如果没有查询到任何值,那么selectOne会返回null,并把null赋值给user对象。这样赋值的时候是不会报错的也不会有任何异常,但是当一个对象为null的时候,是不可以调用其get方法的,会出现空指针异常:
但是将null赋值给user对象的情况和不给user的任何属性set任何值的情况不一样:
可以看到,当user对象被创建出来的时候并不是null的,因此调用其get方法时会根据属性类型返回其初始值。
因此,在使用Mybatis进行查询(即使是查询单条结果)的时候,更推荐将查询结果使用List封装,用selectList方法来进行查询,好处是可以直接使用List的isEmpty方法和size方法来进行判断,并且可以避免空指针异常的麻烦。
如,将上述方法改成如下内容:
public List<User> selectUserByUsername(String username){
List<User> userList = new ArrayList<User>();
DBAccess dbAccess = new DBAccess();
SqlSession sqlSession = null;
try {
sqlSession = dbAccess.getSqlSession();
userList = sqlSession.selectList("User.selectUserByUsername", username);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(sqlSession != null){
sqlSession.close();
}
}
return userList;
}
空指针异常解决。
标签:查询,NullPointerException,sqlSession,user,Mybatis,null,DBAccess,selectOne,User 来源: https://blog.csdn.net/qq_40602986/article/details/106159228
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。