关于idea mybatis 静态资源无法加载到target的一种解决方案

环境

 idea2019.3.3
 JDK8
 Mybatis3.5.3
 Junit4.12
 MySQL5.7.29(Docker)
 MySQL驱动5.1.47

项目过程:

  1. 新建maven项目
  2. 导入依赖
  3. 编写pojo类、Dao接口、DaoMapper映射文件,mybatis核心配置文件、MybatisUtil类
  4. pom.xml文件配置静态资源过滤–maven build标签
  5. 编写测试类并运行
  6. 报错 :
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文件夹下
关于idea mybatis 静态资源无法加载到target的一种解决方案_第1张图片
运行测试代码,成功运行

意外的情况

为了解决问题,通过maven clean插件将缓存(target文件夹)清除,想着通过错误日志排除和解决问题,重新运行代码,这次依旧运行成功,查看target文件夹
关于idea mybatis 静态资源无法加载到target的一种解决方案_第2张图片
之后尝试多次清除缓存进行测试,依旧正常加载配置文件并运行

结论:
idea 加载机制可能存在某些问题,通过手动将配置文件放到target文件夹并运行后,才可以正常加载静态资源

最后:
以前和之后都曾创建过类似的 mybatis maven项目,仅仅这次发生报错,记录以防以后有类似情况

你可能感兴趣的:(关于idea mybatis 静态资源无法加载到target的一种解决方案)