在学习使用mybatis时,我写了一个简单的测试代码。创建SqlSession,然后用SqlSession插入一条数据到数据库中,无奈一直报空指针异常。
private SqlSession session;
@Before
public void init(){
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader()
.getResourceAsStream("SqlMapConfig.xml"));
SqlSession session = ssf.openSession();
}
@Test
public void test1(){
Emp emp = new Emp();
emp.setName("Eric");
emp.setAge(new Double(22.0));
session.insert("test.save",emp);
session.commit();
}
开始以为是配置文件出错,但是仔细检查没有问题,后来在test1方法中测试打印了一下session对象,发现其为null。我又尝试着在init()方法中打印了session对象,发现它为
org.apache.ibatis.session.defaults.DefaultSqlSession@2669b199,不为null。
于是我将代码修改为:
private SqlSession session;
@Before
public void init(){
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader()
.getResourceAsStream("SqlMapConfig.xml"));
SqlSession session = ssf.openSession();
System.out.println(ssfb);
System.out.println(ssf);
System.out.println(session);
Emp emp = new Emp();
emp.setName("Eric");
emp.setAge(new Double(22.0));
session.insert("test.save",emp);
session.commit();
}
直接在init()中执行插入,发现成功。
这里我很疑惑,不知道为什么会这样,因为之前学springmvc时,我都是用@before注解的方法初始化spring容器,其他测试方法没有出现过空指针异常。