(原创)常见报错不常见原因之——org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

本文记录了在使用MyBatis框架过程中遇到的BindingException错误的排查过程,详细介绍了从初步定位问题到最终发现资源文件夹命名错误的全过程。

错误日志:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found).....

常见原因:由于mybatis只要mapper.xml文件有错误,就经常会报这用映射错误。可能是

namespace错误、
resultMap错误(type错误、属性错误)
sql语句中字段名与自定义resultmap中column不符
等等

 

 

经过排查,这些都没错

单元测试也是一直报错,哪怕mapper.xml是最简单的sql语句 

 

曾一度怀疑是编译的问题,因为mapper.xml是复制过来的

 

精疲力尽之际,看到网上有人贴了一张图,是一张idea项目结构图,灵光一现,蓦然回首,才发现,我的资源文件夹名名名错了。。。。

我写的是mapper,然而应该是mappers。。。。

两个启发:

一、公司项目结构很大,子项目下很少看到基础的配置方式,导致这么低级的错误花了一下午加晚饭才搞出来(很菜还不投降)

 

	<bean id="masterSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   	 	<property name="dataSource" ref="wDatasource" />
   	 	<property name="mapperLocations">
     	  	 <list>
           		 <value>classpath*:config/mappers/*</value>
       		 </list>
   	 </property>

 

在基础依赖里找到了。。。。。。早点看到就不至于这样了

二、自己搞不出来就赶紧上网找,自然很多都是废话,但是总有那么一个神圣的时刻灵光一现

 

 

 

 

 

<think>我们正在处理用户关于MyBatis报错org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound)”的问题。根据引用内容,该错误通常是因为MyBatis无法找到与Mapper接口方法对应的SQL映射语句(即XML文件中的语句)导致的。结合引用内容,常见原因包括:1.MapperXML文件没有被正确编译到target目录(引用[3]提到,如果XML文件放在src/main/java目录下,可能会被Maven默认编译,需要在pom.xml中配置资源包含)。2.MapperXML文件中的namespace或id与Mapper接口匹配(引用[2]提到需要检查namespace是否对应Mapper接口的全限定名,以及方法名是否与id一致)。3.Mapper接口没有被扫描到(引用[1]和[2]都提到了需要检查MyBatis的配置,如扫描路径是否正确)。此外,可能的原因还有:4.方法名在Mapper接口和XML中一致(大小写、拼写等)。5.MyBatis配置文件中没有指定mapper的位置(如果是使用配置文件的方式)。6.在SpringBoot中,可能需要使用@MapperScan注解指定扫描路径。因此,我们将按照以下结构组织回答:-先介绍错误背景和常见原因-然后逐步提供解决方案同时,根据指令,我们需要生成相关问题。注意:回答中引用的内容要加上引用标识,例如[^1]</think>### MyBatis报错:`BindingException: Invalid bound statement (not found)` 原因分析 此错误表示MyBatis无法将Mapper接口方法与对应的SQL映射语句绑定,根本原因是**Mapper XML文件未被正确加载或配置匹配**。以下是具体原因及验证方式: #### 🔍 核心原因 1. **XML文件未被编译到类路径** - Maven项目默认只编译`src/main/java`中的`.java`文件,若XML文件放在此目录下,需在`pom.xml`中添加资源声明: ```xml <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` - 验证:检查`target/classes`目录中是否存在编译后的XML文件[^3]。 2. **XML与接口命名/路径匹配** - **规则**:XML的`namespace`必须对应Mapper接口的**全限定名**(包名+类名) ```xml <!-- 正确示例 --> <mapper namespace="com.example.mapper.UserMapper"> ``` - **验证**:检查XML中`<select id="methodName">`的`id`是否与接口方法名**完全一致**(区分大小写)[^2]。 3. **扫描配置错误** - **Spring Boot**:`@MapperScan`注解的包路径需包含Mapper接口 ```java @MapperScan("com.example.mapper") // 包路径必须正确 ``` - **传统MyBatis**:`mybatis-config.xml`中需配置`<mappers>`或指定XML路径[^1]。 4. **其他常见问题** - 多模块项目中,XML文件未放置在`resources`目录的**相同包结构**下 - 构建工具(如Maven/Gradle)过滤了`*.xml`文件 - 方法存在重载(MyBatis支持接口方法重载) #### ✅ 快速排查步骤 1. **检查编译输出**:确认`target/classes`中有XML文件且路径正确 2. **核对命名一致性**: - 接口全限定名 vs XML的`namespace` - 接口方法名 vs SQL语句的`id` 3. **验证扫描配置**:`@MapperScan`或`<mappers>`是否覆盖Mapper位置 4. **清理并重建项目**:执行`mvn clean install`或`gradle clean build` > 经验提示:超过80%的此错误由**XML文件未被编译**或**namespace拼写错误**导致[^2][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值