原因解析:
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层接口的,不能解决这个问题。