关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究
Posted 新来的大狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究相关的知识,希望对你有一定的参考价值。
关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究
环境介绍
IDEA-2018 Maven项目
IDEA Maven项目部分特性介绍
① IDEA Maven项目 默认会忽略 静态资源xml配置文件,导致相应xml文件即使路径正确,也导致 could’t find xxx.xml 的问题
② IDEA Maven项目中, 被标记为Test Resources Root的文件夹中其静态资源会自动加载 (即:引用时可以直接使用文件名,而不需要考虑任何的路径,如:mapper resource=“UserMapper.xml” )
被标记为Test Resources Root的文件夹的示例:
问题描述
整个Maven项目关于Mybatis内容,其中
① mybatis-config.xml配置文件如何设置其路径让项目可以找到识别,以及在项目中如何引用该文件。
② Mybatis项目需要众多mapper.xml文件,如何让项目找到识别这些mapper.xml配置文件以及项目中如何引用。
核心解决思路(不采用Test Resources Root标记方法)
在Maven项目的pom.xml文件下 手动添加 需要的静态资源的路径,并在需要的地方 合理引用 。
整体预设目录结构如下
1. mybatis-config.xml
1.1 具体配置 (让项目能自己找到该xml文件)
由于Mybatis-config.xml配置文件是针对Mybatis的整个配置文件,故事先将其目录结构放置在src下。
src/mybatis-config.xml 示例:
由于src未被设置为Test Resources Root 文件夹(也不应该如此设置), 故IDEA默认会忽略该xml文件。
此处手动设置pom.xml文件,让其不忽略,加载该静态资源。
pom.xml 文件部分代码展示,但结构正确(pom.xml文件由IDEA工具自动生成):
示例结构如下:
在 pom.xml 配置文件中修改代码如下:
<project>
<build>
<finalName>MybatisExample</finalName>
<!--项目编译时手动添加的静态资源xml文件,否则IDEA默认会忽略xml文件-->
<resources>
<resource>
<directory>src</directory>
<includes>
<!--src目录结构下任意以.xml结尾的文件-->
<include>*.xml</include>
<!--语法二也可以,使用**/*.xml,其意义稍后探究-->
<!--<include>**/*.xml</include>-->
</includes>
</resource>
</build>
</project>
1.2 相应的使用 (人为使用 项目已识别的 具体的xml文件)
配置完成后在其他位置可以直接使用文件名进行使用,此处在
src/test/java/CreateFactory.java 中
直接使用 String resource = “mybatis-config.xml”;
具体使用代码:
public class CreateFactory
private static SqlSessionFactory factory = null;
// 测试在POM中注册过的文件可以直接使用文件名
String resource = "mybatis-config.xml";
InputStream inputStream;
private CreateFactory()
public static void main(String[] args)
CreateFactory test = new CreateFactory();
test.create();
/**
* 通过载入XML创建SqlSessionFactory
*/
public void create()
try
inputStream = Resources.getResourceAsStream(resource);
if(factory == null)
println("test create factory!");
factory = new SqlSessionFactoryBuilder().build(inputStream);
catch (IOException e)
e.printStackTrace();
2. mapper.xml
由于每个POJO类需要自己的映射接口和映射XML配置文件,此处选择将mapper.xml与相应的mapper.java分开存储。
具体路径(UserMapper示例)
mapper.java文件: src/package/com/castle/mapper/UserMapper.java
mapper.xml文件 : src/test/UserMapper.xml
示例结构(UserMapper.xml, 此处故意展示路径效果而未放置在被标记为Test Resources Root的resources文件夹下, 同时排除由于该xml文件被IDEA自动加载机制加载的可能性):
2.1 具体配置
由于都是xml文件,项目想要使用都在pom.xml文件中配置,继续先前1.1的配置添加内容。
在 pom.xml 配置文件中新修改代码如下:
<project>
<build>
<finalName>MybatisExample</finalName>
<!--项目编译时手动添加的静态资源xml文件,否则IDEA默认会忽略xml文件-->
<resources>
<resource>
<directory>src</directory>
<includes>
<!--src目录结构下任意以.xml结尾的文件-->
<include>*.xml</include>
<!--语法二针对某些情形也可以,使用**/*.xml,其意义稍后探究-->
<!--<include>**/*.xml</include>-->
</includes>
</resource>
<!--匹配src/test目录下的UserMapper.xml文件-->
<resource>
<directory>src/test</directory>
<includes>
<!--src/test任意目录结构下任意以.xml结尾的文件-->
<include>*.xml</include>
</includes>
</resource>
</build>
</project>
2.2 相应的使用
mapper.xml文件要置于mybatis-config.xml文件中配置才可使整个Mybatis项目运行起来(Mybatis机制要求)
故该mapper.xml(示例为UserMapper.xml) 其引用的使用 是在mybatis-config.xml文件中。
修改 mybatis-config.xml 配置文件代码(其具体路径见1.1)
(主要为configuration标签展示,但标签结构正确):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--映射文件-->
<mappers>
<mapper resource="RoleMapper.xml"/>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
3.1 关于**/*.xml相对路径语法的探究
查阅相关网友介绍:
**/*.xml为ANT匹配模式的通配符: ** 代表了可以匹配 0 个或者任意多个目录
针对配置代码 (pom.xml文件)
<resource>
<directory>src</directory>
<includes>
<!--src任意目录结构下任意以.xml结尾的文件-->
<!--语法二也可以,使用**/*.xml,其意义现在探究-->
<include>**/*.xml</include>
</includes>
</resource>
① 当对 src/mybatis-config.xml 文件
具体使用(在CreateFactory.java中) 为
String resource = "mybatis-config.xml";
项目 可以 根据**/*.xml的匹配模式找到该文件。
② 但对 src/test/UserMapper.xml文件
具体使用(在mybatis-config.xml中) 为
< mappers >
< mapper resource="UserMapper.xml"/>
< /mappers >
项目 不可以 根据**/*.xml的匹配模式找到该文件, 发生could’t find xxx.xml异常。
3.2 关于**/*.xml相对路径语法的个人推论
由 ** 代表了可以匹配 0 个或者任意多个目录的ANT语法解释 用来解释Maven此处,想表达
src目录下任意目录结构下任意以.xml后缀结尾的文件 的意思 (这里想借任意目录结构搜索到src/test文件夹下的UserMapper.xml文件,但是失败了,显示 UserMapper.xml not found!)
但当将对UserMapper.xml的使用时修改一下便可以成功找到
此时 仍然使用 < include >**/*.xml< /include > 这种匹配语法, 父标签目录仍为 < directory >src< /directory > 。
但是对使用时添加一定的路径稍作修改,即可成功找到,即:
< mappers >
< mapper resource="test/UserMapper.xml">
< /mappers >
故 ** 被解释 为代表0个和多个目录的解释 用来解释Mybatis路径配置 存在一定的歧义或问题
4. 总结:IDEA的mybatis项目中对静态资源实现加载的两种方式
① 将需要使用的静态资源所在的文件夹标记为 Test Resources Root 形式,可以直接用名称调用。
② 手动在pom.xml文件中配置< build >标签下的资源。建议不同路径可以设置多个< resource >标签,匹配可以使用 *.xml 语法
以上是关于关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究的主要内容,如果未能解决你的问题,请参考以下文章
项目笔记: IDEA+MAVEN+Bootstrap+Spring+Mybatis+SpringMVC+Mysql
如何用IDEA创建springboot(maven)并且整合mybatis连接mysql数据库和遇到的问题