说明
今天想着学习一下mybatis,使用的工具是IDEA2017,照着网上一个非常基础的入门教程敲完代码后,发现怎么修改都读不了sqlMapConfig.xml这个全局配置文件,看了好几篇文档终于找到解决办法,这里记录一下备用。
项目结构

这是我的项目结构: --> classes: 输出目录 --> config: xml等配置文件 --> lib: 第三方库 --> src: java代码
我的module输出目录设置:

其中,customer.java是实体类对象,TestCustomer.java是测试类,类中的main方法如下。
public static void main(String[] args) throws IOException {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory factory = builder.build(is);
SqlSession sqlSession = factory.openSession();
Customer customer = new Customer();
customer.setName("lalala");
customer.setGender("男");
customer.setTelephone("12345678909");
sqlSession.insert("insert", customer);
sqlSession.commit();
sqlSession.close();
}
满心欢喜,照着敲完代码,运行。。。直接提示:

好吧,直接google,得知IDEA是看文件夹的标记来判断文件夹里的内容的,举例来说:

其中, src目录是默认标记为Sources的,以下是这几种目录标记的说明:参考文档
1、Sources
通过将文件夹加入这种类别,来告诉IDEA,这个文件夹和它的子文件夹中包含源码,在构建工程时,需要作为一部分被编译进去。
2、Tests
这个类别的文件夹也用于存放源码,不过是测试的源码(比如单元测试),Tests文件夹可以帮助你将测试代码和产品代码分离开。
3、Resources
该类文件夹用于存放你的应用中需要用到的资源文件(如: 图片,xml或者properties配置文件等)。
在构建过程中,Resources文件夹中的内容均会按照原文件的样子被复制到输出文件夹。和Sources文件夹一样,你可以定制你的Resources文件夹的结构。也可以指定你的Resources文件夹中的文件被拷贝到输出文件的哪个文件夹中。
默认情况下,工程编译后,Resources中的文件和文件夹会被放置在和源码编译后相同的文件夹中,所以如果在源码中以相对路径读取Resources中的配置文件时,可认为src中的java文件夹和Resources为同一个根目录。
4、Test Resources
只有在java模式中可以使用,用于存放测试源码中关联的资源文件。除此之外,和Resources文件夹没有区别。
5、Excluded
排除的文件夹,搜索时,IDEA不会查找排除的文件夹。往前翻一下设置输出目录classes那张图,就会发现,classes是Excluded标记的。
按照以上解释,得知xml等配置文件需要设置为Resources类型,好的,马上设置,在config上右键,然后点击Resources,设置之后,在右边会有显示:

再去执行main方法,然而还是提示Could not find resource sqlMapConfig.xml,查看classes目录,发现idea也没有将xml文件拷贝到这里,感觉是输出有问题。
继续google,最后发现,需要重新rebuild一下项目,在Build->reBuild Project中,重新编译项目后,去classes目录下就看到了xml文件了,这个时候再执行main方法,就可以成功insert数据到数据库中。
