异常如下:
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 MybatisTest.main(MybatisTest.java:17)
主测试代码:
import itcast.dao.UserDao;
import itcast.domain.User;
import jdk.internal.loader.Resource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import sun.security.util.Resources;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
public static void main(String[] args) throws IOException {
InputStream in = Resources.class.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
session.close();
in.close();
}
}
用debug运行:
上csdn查,发现大多数都是配置文件出问题
下面是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="itcast.dao.UserDao"/>
</mappers>
</configuration>
其中大多数的问题是把
这两个id搞错了,而我这个是没错
我花了一个下午的时间都在查问题出现在哪
后来我把原视频的代码一行行对,才发现了问题所在:
导包导错了
错误的包:sun.security.util.Resources
改了之后:org.apache.ibatis.io.Resources;
改完就能运行了
有一个小细节其实也可以发现问题:
导(sun.security.util.Resources)这个包:
InputStream in = Resources.class.getResourceAsStream(“SqlMapConfig.xml”);
导(org.apache.ibatis.io.Resources)这个包:
InputStream in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
区别是有无class