原因解析:
mapper 层的 Mapper 接口与 xml 文件映射出现问题、或 mapper 接口直接找不到xml文件。
解决方法:
一、查看 target 下是否打包了 xml 文件。
有一种情况是 xml 文件没有放在 resources 目录下,而放在了java包下,导致打包后 target/class 目录下没有 xml文件。
解决:pom.xml 中添加:
<resources>
<resource>
<directory>src/main/java</directory>
<!-- 此配置不可缺,否则mybatis的Mapper.xml将会丢失 -->
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
二、查看 xml文件中 namespace 与 接口是否对应正确,id 与方法名是否对应
三、如果以上都没有问题,那么再查看 application.yml 中关于 mybatis 的配置。
敲黑板!!!
敲黑板!!!
注意两点:
1、mybatis: 是顶层元素,所谓顶层元素,就是在页面最左边,前面不要有空格、不然会被包含在前面一个大块中
(我被这么个细节折磨了好久)
2、尽量用 classpath* 不要用 classpath
classpath:只会到你指定的class路径中查找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找
#mybatis:
mybatis:
mapperLocations: classpath*:/com/user/mappers/*.xml
四、终极解决办法
将 mapper 层接口与 xml 文件的路径保持一致。这样可以直接免去 application.yml 中的配置,
在打包时会将xml文件打包到 mapper 接口所在的包下。
如下图:
这样出错得概率最小
注:一些博客上分析在 入口处使用 @MapperScan 注解,这个注解是为了 扫描 mapper层接口的,不能解决这个问题。