springboot整合mybatis错误 Invalid bound statement (not found): 解决办法

    技术2022-07-11  127

    原因解析:

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

    Processed: 0.009, SQL: 9