构建Spring Boot简单项目报错: Invalid bound statement (not found)【找不到mapper文件】【找不打mapper中

919 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题背景

目的是构建一个Spring Boot工程,连接本地数据库,进行SQL方面的研究。构建过程遇到两个问题,随笔记下。

问题描述

问题一: 启动项目时,找不到mapper文件(项目直接起不来,如下图)

问题二:启动项目后,访问Controller中方法时报500(如下图)

解决思路

问题一:

  1. 首先mapper文件其实是接口(interface)对应的实现类,通常这两个文件与对应的pojo都不是我们手动去写的,而是通过mybatis的一款插件generator来生成的。所以注意力不应该放在这三个类的内容上,可以确定的是这是配置的问题。

  2. 从图中也可以清晰的看到:使用@Autowired注解,没有注入对应的mapper文件(也就是说对应的接口没有被IOC管理)。目标定位到接口(interface)上

  3. 发现缺少接口上缺少注解,添加@Mapper注解,添加过程中发现缺少相关依赖。

  4. 在pom.xml中添加@Mapper注解对应的依赖

  5. 接口添加@Mapper注解,项目正常启动(@Mapper将接口交于IOC管理,@Autowired可以注入)

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

问题二:

  1. 项目正常启动,打开浏览器输入访问路径,控制台报500错误(问题描述第二个图)

  2. 这个时候怀疑是不是标签上的id与方法不一致(自动生成的文件,可能性很小,但是不排除)

  3. 尝试使用mapper文件中其他方法,都会报这个错,只是方法名不同

  4. 问题在于Spring Boot根本没有找到这个类

  5. 找到target查看mapper文件是否被打包编译

6.在pom.xml文件中添加如下配置,重新启动项目发现mapper文件也被打包了,解决问题

<!-- 如果当前pom里有<build>标签,就粘贴<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>

问题总结

解决这两个问题需要一定的基础知识,比如在@Autowired注入bean失败时,你就应该知道是这个bean没有被IOC管理,当你发现所有方法都报同一个错误时,你应该想到是这个mapper文件没有被编译。这个时候如果你看过一遍mybatis官方文档,你知识储备里就知道mapper文件可以放在两个位置,一个是在resources下与java文件夹同目录的包下,另一个是在于同名的接口放在一起(本例就是这种方式)。加上这个知识储备,很快就能知道是位置的问题,接着百度一下,问题很容易就得到解决。

如果对mybatis与spring的ioc原理不熟悉的,建议看如下两篇文章,快速入门SSM,Spring Boot等企业级开发框架:

Evader1997:初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Spring)300 赞同 · 29 评论文章

Evader1997:初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Mybatis)14 赞同 · 1 评论文章