问题
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。一般我们使用如下的代码得到一个SqlSessionFactory 实例:
String resource = "mybatis-config.xml"; // 该xml文件配置了一个Configuration
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
在使用Idea进行开发时,只要将xml文件所在文件夹设置成资源文件夹就可以了,而VS Code并没有设置成资源文件一说(也许有,只是我不知道)。
在VS Code中使用Resources.getResourceAsXX();时报:java.io.IOException: Could not find resource mybatis-config.xml
解决方法
解决方法有二
方法1
使用build方法的重载,直接读取文件,如下:
// 直接读取文件方式
// 不使用Resources类帮我们读取xml文件,我们自己读取文件
InputStream is = new FileInputStream("MybatisDemo1/resources/mybatis-config.xml");
sqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
方法2
因为Resources.getResourceAsXX默认读取Sources目录(即src目录),所以只要将xml文件放到src目录(即源码根路径)下即可。
然后就可以使用下面的代码
String configName = "mybatis-config.xml";
// 加载配置文件
InputStream resourceAsStream = Resources.getResourceAsStream(configName);
// 通过SqlSessionFactoryBuilder()构建SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
注:也许你的Sources目录不是src,你可以通过以下步骤查看你的Sources目录
打开资源管理器,在资源管理器中找到JAVA PROJECTS,将鼠标放上去右边会出现几个图标,找到最右边的 ... 图标并点击,在弹出的菜单中点击Configure Classpath,然后就能看到你的Sources目录了。
总结
推荐使用方法2,因为我们开发时可能会在mybatis-config.xml文件中使用<properties resource=“jdbc.properties”></properties>引入另一个配置文件,如果使用方法1,会导致找不到“jdbc.properties”文件,就算写上jdbc.proterties的全路径依旧会报错。所以推荐使用方法2,将mybatis-config.xml和jdbc.properties都放在src目录下。