### Error opening session. Cause: java.lang.NullPointerException
阿新 • • 發佈:2020-11-29
在測試mybatis的SQL語句時,出現如下錯誤提示:
我的Java程式碼:
//測試查詢 @Test public void run1() throws Exception { // 載入配置檔案 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); // 建立SqlSessionFactory物件 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 建立SqlSession物件 SqlSession session = factory.openSession(); // 獲取到代理物件 BlogMapper mapper = session.getMapper(BlogMapper.class); List<Blog> emps = mapper.selectByExample(null); for (Blog blog : emps) { System.out.println(blog); } // 關閉資源 session.close(); in.close(); }
錯誤原因是我在整合SSM框架的時候,把mybatis框架的部分配置,整合到了spring-context.xml配置檔案中。下面是可以發現下面mybatis-config.xml檔案中沒有關於資料庫的配置。
<?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"> <!-- MyBatis的全域性配置檔案 --> <configuration> <settings> <!-- 對映下劃線到駝峰命名 last_name ==> lastName --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 開啟延遲載入 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 指定載入的屬性是按需載入 --> <setting name="aggressiveLazyLoading" value="false"/> <!-- 二級快取 --> <setting name="cacheEnabled" value="true"/> </settings> <!--使用typeAliases配置別名,它只能配置domain中類的別名 --> <typeAliases> <package name="com.online.domain"/> </typeAliases> <!--分頁外掛--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins> </configuration>
解決辦法:
在mybatis-config.xml的同級目錄下,新增一個新的Mybatis配置檔案SqlMapConfig.xml進行測試使用。
SqlMapConfig.xml程式碼:
<?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"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 引入對映配置檔案 --> <mappers> <package name="com.online.dao"/> </mappers> </configuration>
然後將Java程式碼中的mybatis-config.xml換為SqlMapConfig.xml。
//測試查詢
@Test
public void run1() throws Exception {
// 載入配置檔案
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 建立SqlSessionFactory物件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 建立SqlSession物件
SqlSession session = factory.openSession();
// 獲取到代理物件
BlogMapper mapper = session.getMapper(BlogMapper.class);
List<Blog> emps = mapper.selectByExample(null);
for (Blog blog : emps) {
System.out.println(blog);
}
// 關閉資源
session.close();
in.close();
}