前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis selectOne查询空指针异常NullPointerException

Mybatis selectOne查询空指针异常NullPointerException

作者头像
崔笑颜
发布2020-06-08 17:15:09
3K0
发布2020-06-08 17:15:09
举报

为什么selectOne会报空指针异常?又如何解决?

假设有如下方法:

代码语言:javascript
复制
	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方法的,会出现空指针异常:

20200516150506819
20200516150506819

但是将null赋值给user对象的情况和不给user的任何属性set任何值的情况不一样:

20200516150347375
20200516150347375

可以看到,当user对象被创建出来的时候并不是null的,因此调用其get方法时会根据属性类型返回其初始值。

因此,在使用Mybatis进行查询(即使是查询单条结果)的时候,更推荐将查询结果使用List封装,用selectList方法来进行查询,好处是可以直接使用List的isEmpty方法和size方法来进行判断,并且可以避免空指针异常的麻烦。

解决

代码语言:javascript
复制
	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;
	}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 假设有如下方法:
  • 解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档