1. 程式人生 > >SqlSession空指標異常

SqlSession空指標異常

在學習使用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物件,發現它為

[email protected],不為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容器,其他測試方法沒有出現過空指標異常。