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

问题背景

目的是构建一个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等企业级开发框架:
    初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Spring)
    初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Mybatis)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayden 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值