问题起因
我们系统使用Mybatis作为持久层框架,这里不详细描述Mybatis框架的使用方法,我们讲述三种加载mapper的方式总结:
- <mapper resource="" />加载普通的xml文件,传入xml的相对路径(相对于类路径)
- <mapper class="" />使用mapper接口的全限定名来加载,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一个目录
- <package name="" />扫描指定包下的所有mapper,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一目录。
使用第三种方式时,这样就会自动加载com.yogurt.mapper包下的所有mapper,这种方式需要将mapper接口文件和mapper.xml文件都放在com.yogurt.mapper包下,且接口文件和xml文件的文件名要一致。注意,在IDEA的maven开发环境下,maven中还需配置<resources>标签,否则maven打包不会将java源码目录下的xml文件打包进去,怎么配置?请继续看下去。
<mappers>
<package name="com.yogurt.mapper"/>
</mappers>
此时会存在两种情况:
- 将mapper.xml文件配置在
src/main/resources下
;
- 将mapper.xml文件配置在src/main/java目录下。注意,因为
src/main/java
被设定为了源码目录,默认只会将其中的Java文件进行编译打包。
问题出现
上述第二种方式,在调用接口报错如下
解决方案
解决方案呢?当然有,手动将src/main/resources
也添加到配置就可以了。按如下的pom.xml
配置,maven打包时,既能包含src/main/java
下的XML文件,也能包含资源目录(src/main/resources
)下面的资源文件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
看都看到这里了,给个赞吧~