2025-07-04 22:54:54.259 [http-nio-8080-exec-1] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet]-Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.aaa.mapper.EmpMapper.list] with root cause
时间: 2025-07-04 09:21:02 浏览: 13
<think>我们正在处理用户的问题:"MyBatis BindingException Invalid bound statement not found EmpMapper.list 解决方案"
根据提供的引用内容,我们可以总结出以下常见原因和解决方案:
常见原因:
1. Mapper.xml文件没有正确放置在resources目录下,或者目录结构不正确(例如,在resources中创建目录时使用了点分隔而不是路径分隔)。
2. Mapper.xml文件没有被正确扫描到(例如,MyBatis配置文件中指定的mapper路径不正确,或者在Spring Boot中配置的mybatis.mapper-locations不正确)。
3. Mapper接口和Mapper.xml的命名不一致(例如,接口名和xml文件名不一致,或者namespace配置不正确)。
4. 项目构建时没有将xml文件复制到target/classes目录下(例如,maven项目默认不会将xml文件复制到类路径,需要在pom.xml中配置资源过滤)。
解决方案:
1. 检查Mapper.xml文件的存放位置:
- 在resources目录中,应该按照Mapper接口的包路径创建目录(例如,com/itheima/mapper),然后将Mapper.xml文件放在该目录下。
- 注意:在resources中创建多级目录时,应该使用`/`分隔,而不是使用点号(例如,不要使用com.itheima.mapper这样的文件夹名,而应该创建com/itheima/mapper这样的多级目录)。
2. 检查Mapper.xml文件中的namespace和id:
- namespace应该是Mapper接口的全限定名(例如:com.itheima.mapper.EmpMapper)。
- id应该是接口中对应的方法名(例如:list)。
3. 检查MyBatis的配置(Spring Boot项目中):
- 在application.properties或application.yml中配置mybatis.mapper-locations,确保路径正确。例如:
properties
mybatis.mapper-locations=classpath:com/itheima/mapper/*.xml
4. 检查Maven的资源配置(如果使用Maven):
- 在pom.xml中添加资源过滤,确保xml文件被复制到target/classes目录下。例如:
xml
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
5. 清理并重新构建项目:
- 执行mvn clean install(Maven项目)或者清理IDE的构建缓存(例如,在IntelliJ IDEA中执行Build -> Rebuild Project),然后重新运行。
6. 检查IDE的设置:
- 有些IDE(如IntelliJ IDEA)在构建时可能不会将resources目录下的文件复制到输出目录。可以检查target/classes目录下是否存在对应的Mapper.xml文件。
根据引用[3]和[4],特别要注意的是在resources中创建目录的方式:不能直接创建带点的文件夹名(如com.itheima.mapper),而应该创建多级目录(com/itheima/mapper)。
如果按照上述步骤检查,通常可以解决该问题。
生成相关问题:
1. 如何配置MyBatis的mapper-locations?
2. Maven项目中如何正确包含XML资源文件?
3. MyBatis中Mapper接口和XML文件如何绑定?
4. 如何检查MyBatis的SQL映射文件是否被正确加载?
5. 除了BindingException,MyBatis还有哪些常见异常?</think>### MyBatis BindingException: Invalid bound statement (not found) 解决方案
该异常通常由 **Mapper接口与XML映射文件未正确绑定** 引起,以下是系统排查步骤:
#### 1. 检查XML文件路径与命名规范
- **目录结构问题**:在`resources`目录中创建多级文件夹时,必须使用 **正斜杠`/`** 而非包名点号
```bash
# 正确路径(推荐)
src/main/resources/com/example/mapper/EmpMapper.xml
# 错误路径(会引发异常)
src/main/resources/com.example.mapper/EmpMapper.xml ❌
```
引用[3][4]指出:资源目录中创建多级文件夹时,需使用`com/example/mapper`格式[^3][^4]。
- **文件命名规则**:XML文件名必须与Mapper接口名 **严格一致**
```java
// Mapper接口
public interface EmpMapper { ... }
```
```xml
<!-- XML文件命名 -->
EmpMapper.xml ✅
EmployeeMapper.xml ❌
```
#### 2. 验证XML配置内容
- **namespace绑定**:XML中的`namespace`需指向Mapper接口全限定名
```xml
<!-- 正确示例 -->
<mapper namespace="com.example.mapper.EmpMapper">
```
- **SQL ID匹配**:`<select>`等标签的`id`必须与方法名一致
```xml
<select id="list"> <!-- 需与EmpMapper.list()方法对应 -->
SELECT * FROM emp
</select>
```
#### 3. 检查构建配置(Maven/Gradle)
在`pom.xml`中添加资源过滤配置:
```xml
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include> <!-- 包含所有XML文件 -->
</includes>
</resource>
</resources>
</build>
```
执行`mvn clean install` 确保XML被复制到`target/classes`目录[^3]。
#### 4. 确认MyBatis扫描配置
在Spring Boot的`application.yml`中显式指定mapper路径:
```yaml
mybatis:
mapper-locations: classpath*:com/example/mapper/*.xml
```
#### 5. 终极验证步骤
1. 检查编译后的`target/classes`目录:
- 确认存在 `com/example/mapper/EmpMapper.xml`
2. 使用IDE反编译工具查看`.class`文件:
- 检查`EmpMapper.class`是否包含`list()`方法
3. 清理缓存后重启:
```bash
mvn clean spring-boot:run
```
> **重要提示**:该异常本质是 **运行时未找到映射声明**,需确保XML文件物理存在于最终部署包中[^1][^2]。
阅读全文
相关推荐



















