环境
idea2019.3.3
JDK8
Mybatis3.5.3
Junit4.12
MySQL5.7.29(Docker)
MySQL驱动5.1.47
项目过程:
- 新建maven项目
- 导入依赖
- 编写pojo类、Dao接口、DaoMapper映射文件,mybatis核心配置文件、MybatisUtil类
- pom.xml文件配置静态资源过滤–maven build标签
- 编写测试类并运行
- 报错 :
java.io.IOException: Could not find resource mybatis-config.xml
本人并不是第一次使用mybatis,之前都能正常加载文件,无类似报错发生
此时打开target文件夹,发现没有Mapper.xml和核心配置文件,并且target根目录下只有两个文件夹classes和test-classes
开始以为是代码问题导致无法加载,测试代码如下
SqlSession session = MybatisUtil.getSession();
List<User> users = session.getMapper(UserMapper.class).getUserList();
for (User user : users) {
System.out.println(user);
}
session.close();
工具类代码如下
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
很明显在测试代码的第一行出错,没有成功读取到核心配置文件,后续代码无法判定是否对错
此时的问题是:已经配置静态资源过滤的情况下依旧没有加载到Mapper.xml和核心配置文件,并且本身resources文件夹下的资源应该是自动加载的,也没有执行
解决方式
为了验证后续代码是否出错,手动将文件复制到target/classes文件夹下
运行测试代码,成功运行
意外的情况
为了解决问题,通过maven clean插件将缓存(target文件夹)清除,想着通过错误日志排除和解决问题,重新运行代码,这次依旧运行成功,查看target文件夹
之后尝试多次清除缓存进行测试,依旧正常加载配置文件并运行
结论:
idea 加载机制可能存在某些问题,通过手动将配置文件放到target文件夹并运行后,才可以正常加载静态资源
最后:
以前和之后都曾创建过类似的 mybatis maven项目,仅仅这次发生报错,记录以防以后有类似情况