MyBatis 报错 java.lang.ExceptionInInitializerError
这个问题困扰了自己好半天,最后终于解决了,分享给大家,避免踩坑。
关于这个问题的解决方法网上都有很多说是静态资源文件没有导出的问题,当然这也是原因之一,但是如果设置了静态资源文件导出那么就可能是其他原因了。
- 静态资源文件导出
项目编译之后要去target目录里面看看mapper.xml文件是否被编译进去了,如果没有编译进去就需要在pom.xml文件里面设置静态资源文件导出。
设置静态资源文件导出
<build>
<!--maven静态资源过滤问题-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
- 经过了自己半天的摸索最后发现了自己的不是静态资源文件的问题,而是获取sqlSession时没有设置提交事务,最终设置了提交事务之后不报错能查到数据了。
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSession
String resource = "mybatis-config.xml";
InputStream stream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
openSession(true) 设置了提交事务