08_一个java.lang.NullPointException报错
【报错代码】
public class UserDaoTest{ private SqlSessionFactory sqlSessionFactory; //此方法在执行testFindUserById() 之前执行 @Before public void setUp() throws Exception { //创建sqlSessionfactory //MyBatis配置文件 String resource="SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream=Resources.getResourceAsStream(resource); //创建会话工厂,传入MyBatis的配置文件信息 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { //创建UserDao的对象 UserDao userDao =new UserDaoImpl(sqlSessionFactory); //调用UserDao的方法 User user =userDao.findUserById(4); System.out.println(user.toString()); } }
【修正代码】
public class UserDaoTest{ private SqlSessionFactory sqlSessionFactory; //此方法在执行testFindUserById() 之前执行 @Before public void setUp() throws Exception { //创建sqlSessionfactory //MyBatis配置文件 String resource="SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream=Resources.getResourceAsStream(resource); //创建会话工厂,传入MyBatis的配置文件信息 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { //创建UserDao的对象 UserDao userDao =new UserDaoImpl(sqlSessionFactory); //调用UserDao的方法 User user =userDao.findUserById(4); System.out.println(user.toString()); } }
【原因分析】
@Before的方法在@Test方法之前执行,自己直接拷贝了之前的代码,在类中已经在两个方法之外定义了private SqlSessionFactory sqlSessionFactory;
本意是两个方法共用,但自己拷贝了之前代码,却忽略了@Before中会重新new一个对象,SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); 最后debug才发现错误。
写此文谨记再勿犯此错!