开始学Mybatis,一开始就遇到了一个空指针的bug,一查就是一上午。。。。。
Exception in thread "main" java.lang.NullPointerException
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:84)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at com.xs.test.MybatisTest.main(MybatisTest.java:24)
测试的时候发现就是加载的配置文件一直就是null。。。。。
1. 看这个报错信息就感觉可能是配置文件出了问题。于是去先检查配置文件。
mybatis配置文件中先检查:
<environments default="mysql1">
<!--配置mysql的环境-->
<environment id="mysql1">
这一块如果命名不一致的情况,也会出现空指针异常的报错。
2. 再去看指定映射配置文件的位置是否正确,也就是mapper的配置:
<mappers>
<mapper resource="com/xs/dao/IUserDao.xml"/>
</mappers>
这里使用的是resource,我的配置文件是在resources下的,位置如下:
3. 后来又去看了看maven工程中依赖是不是导入的有问题,检查了一圈也没有什么问题。
最后发现问题在测试代码中:
一开始我是这么写的:
//导入的包名
import javax.annotation.Resources;
//代码
InputStream in = Resources.class.getResourceAsStream("SqlMapConfig.xml");
一开始直接写*Resources.getResourceAsStream(“SqlMapConfig.xml”);*的时候就提示说这个方法不存在,我当时也没反应过来是包导错了 ,然后Google了一下加上了.class,就不报错了,实在是想得太简单了。
然后才发现正确的应该是这样的:
//包名应该是这个。。。
import org.apache.ibatis.io.Resources;
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
改完包名就好了,之前提示方法不存在的原因就是因为包导错了。
实在是太不小心了,有很多时候,方法名相同,包导错了就很可能会出现问题。
欢迎大家访问我的个人博客