多维度解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)出现的问题

🍋项目中出现的问题

最近,在做项目的时候,Springboot框架整合mybatis插件时报了绑定异常的错误,错误如下图所示。

在这里插入图片描述

🍋分析问题

看到这个问题,刚开始在想是不是Springboot主类与mybatis的xml文件没有绑定上,便去target目录下查看xml文件是否被成功编译,找到target目录下的mapper文件夹,发现里面并没有把xml文件编译好,导致程序要运行xml文件的时候,找不到该文件,便报了绑定异常的错误,问题如下图所示。

在这里插入图片描述

这个错误让我想到之前的xml文件都是放在resources目录下的,这次放在java目录下直接报错;其原因是maven中默认会从项目的src/main/resources目录下查找资源,如果要读取其他路径下的资源的文件,就需要在build 标签中指定资源的路径,因此src/main/java目录下xml文件就属于资源的文件,需要在pom.xml文件指定资源的路径。

🍋解决问题

🍋方案一

第一种方法,直接把src/main/java目录下的xml文件复制到target/classes目录下的对应位置,问题即可解决,操作如下图所示。

在这里插入图片描述

缺点:不能复用,只要有xml文件新增,都要手动操作一遍。

🍋方案二

第二种方法,把src/main/java目录下的xml文件复制到src/main/resources目录下,由于maven中默认会从项目的src/main/resources目录下查找资源,因此重新启动项目问题即可解决,操作如下图所示。

在这里插入图片描述

缺点:资源文件都只能放在src/main/resourcces目录下,不可放在src/main/java目录下。

🍋方案三

第三种方法,对上述两种方案缺点进行分析,引入一种src/main/java目录和src/main/resources目录下都可自动完成编译,这种方法需要在pom.xml文件下的标签引入如下代码片段:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

引入了上述代码片段,控制台出现了新的问题,问题如下图所示。

在这里插入图片描述

控制台出现的问题有两点值得关注,一是配置文件启动失败,二是数据源没有配置;两个问题综合一分析,大概也知道问题所在,先去target目录下的classes文件找找原因,问题如下图所示。

在这里插入图片描述

根据上述分析,其原因是resources目录下的配置文件没有加载进来;之前分析过maven中默认会从项目的src/main/resources目录下查找资源,怎么会出现这个问题;这一系列问题都指向上述配置的代码片段,上述的代码片段新增了资源查找的方式,那maven会把之前默认资源查找的方式给弃用,使用新增的资源查找方式;因此,经过如上分析,只需在原来的代码片段上新增src/main/resources目录的资源查找方式,具体的操作如下代码片段:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

经过以上代码实现,便可完成target目录所有文件的编译,结果如下两张图图所示。

在这里插入图片描述
在这里插入图片描述

🍋注意

回到刚开始出现的问题,绑定异常错误基本可以解决;若配置上述操作依然出现问题,这时候要看看Springboot框架是不是没有与mybatis插件建立联系,一般都是把这种联系写成全局配置,若没有如下图配置,可以尝试去配置文件进行配置,要非常注意下面代码的编写,毕竟写错了它也不报错,要找到问题比较难。

在这里插入图片描述

经过上述流程,问题基本可以解决;若绑定异常错误依然不可以解决或者有更好的解决办法,欢迎大家在评论区留言。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值