解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

文章讲述了在使用Mybatis时遇到的BindingException问题,主要是由于接口与mapperXML映射文件的绑定出错。解决方案包括检查@MapperScan的路径、确认pom.xml中资源配置、确保接口名与XML文件名一致。一个常见的被忽视的错误源是接口名与XML文件名不匹配,修正后问题可得到解决。

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。

6)mapper的xml文件配置路径不正确。SpringBoot要扫描到mapper静态资源文件即xml文件,需要添加配置类

@Configuration
@MapperScan("com.example.demo.mapper")
public class MyBatisConfiguration {
}

@MapperScan注解里的路径不对会出问题,mapper在resource资源夹下,resource在字节码文件中并不存在,mapper是与.java文件同级的。

@MapperScan 和 @Mapper 用其中一个就可以了

还有一种问题,就是pom中的配置问题

在检查调用的 Mapper 接口时,发现在目标文件中没有找到 Mapper 映射的配置文件,在项目的 target 目标文件中可以看到,与接口对应的 Mapper 文件未加载,所以在程序启动时,就找不到对应的映射文件,导致的这个错误。

解决办法:

在 pom 配置文件中键入 <build> 节点,并指明资源类型,这样在程序启动时,就可以正确加载配置文件了:

Java中的配置资源类型:

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

Resource中的配置资源类型:

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

当然项目需求可以同时键入两个:

<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>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

键入<build> 节点后,在次启动项目,在项目的 target 目标文件中,就可以看到接口对应的映射文件了,问题解决咯!!!!

照着修改之后,问题依旧存在。最终花费了好大的力气才找到自己代码问题的根源。dao接口与xml的文件名不一致。

接口名与接口文件名都是DepartmentDao, 而配置文件名为DeparmentDao.xml,费了很大的劲才看到两者名字查一个t字母。修改后就一切正常了。

这是一个很容易忽视的点,记住:接口名与Mybatis的映射文件名一定要一模一样。

`org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 错误通常表示 MyBatis 找不到指定的 SQL 映射语句,以下是一些可能的解决方法: #### 检查映射文件与接口绑定 此错误可能是 Mybatis 中的映射文件跟接口文件绑定错误导致的,需要反复检查关于 Mapper 与映射文件的细节之处,确保映射文件中的命名空间(namespace)与对应的 Mapper 接口的全限定名一致,并且 SQL 语句的 id 与 Mapper 接口中的方法名一致[^2]。 示例: Mapper 接口: ```java package com.kangning.system.mapper; import java.util.List; import com.kangning.system.entity.SysDictData; public interface SysDictDataMapper { List<SysDictData> selectDictDataList(); } ``` 映射文件(`SysDictDataMapper.xml`): ```xml <mapper namespace="com.kangning.system.mapper.SysDictDataMapper"> <select id="selectDictDataList" resultType="com.kangning.system.entity.SysDictData"> SELECT * FROM sys_dict_data </select> </mapper> ``` #### 检查映射文件路径配置 要保证 MyBatis 能够找到映射文件。在 MyBatis 的配置文件中,需要正确配置映射文件的路径。如果使用 Spring Boot 集成 MyBatis,可在 `application.properties` 或 `application.yml` 中进行配置。 `application.properties` 示例: ```properties mybatis.mapper-locations=classpath:mapper/*.xml ``` `application.yml` 示例: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml ``` #### 检查编译问题 有时候编译过程可能会出现问题,导致映射文件没有正确复制到目标目录。可以尝试清理项目并重新编译。 在 Maven 项目中,可使用以下命令: ```sh mvn clean install ``` #### 检查缓存问题 缓存可能会导致旧的映射信息被使用,可尝试使缓存失效或重启项目。在一些开发工具(如 IntelliJ IDEA)里执行该操作,原本的缓存文件虽不会立即从磁盘物理删除,但会被标记为无效,开发工具后续会重新构建缓存数据 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值