2025-03-17T13:53:50.167+08:00 INFO 20820 --- [demo1] [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2025-03-17T13:53:50.167+08:00 INFO 20820 --- [demo1] [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2025-03-17T13:53:50.168+08:00 INFO 20820 --- [demo1] [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 2025-03-17T13:53:50.205+08:00 INFO 20820 --- [demo1] [nio-8080-exec-2] c.example.demo.controller.EmpController : 查询的页面:1 2025-03-17T13:53:50.212+08:00 ERROR 20820 --- [demo1] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[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.example.demo.mapper.EmpMapper.list] with root cause
时间: 2025-07-06 10:32:05 浏览: 10
<think>嗯,用户遇到了org.apache.ibatis.binding.BindingException异常,具体是Invalid bound statement not found,指向EmpMapper.list方法。我需要根据提供的引用资料来思考解决方案。
首先,根据引用[3]提到的,可能的原因包括mapper.xml和接口不对应、配置问题或者mybatis配置未正确开启。用户需要检查EmpMapper接口中的list方法是否在对应的XML文件中有定义,并且方法名一致。另外,使用mybatisX插件可以帮助检查映射是否正确,确保XML和接口能互相跳转。
接下来,引用[4]提到XML文件可能没有被正确打包到项目中。用户应该检查pom.xml中的资源配置,确保XML文件被包含在构建路径中。例如,Maven项目需要在pom里配置<resources>来包含src/main/java下的XML文件,或者将XML放在resources目录下。
另外,mybatis的配置是否正确也很重要。引用[3]和[4]都提到了需要检查mybatis-plus的配置,比如mapper-locations是否正确指向XML文件的位置,是否有拼写错误或路径问题。如果XML文件放在resources/mapper目录下,配置应该是classpath*:mapper/*.xml。
还有,清理和重新构建项目可能解决缓存或旧构建文件导致的问题。比如执行mvn clean install或清理IDE的缓存。
如果以上步骤都检查无误,但问题依旧,可能需要查看生成的target目录,确认XML文件是否被正确复制进去。有时候文件虽然存在源码目录,但构建时没被包含进去,就会导致运行时找不到。
最后,用户提到的EmpMapper.list,需要具体检查方法名是否在XML中有对应的id,以及namespace是否正确对应到接口的全限定名。例如,XML的namespace应该是com.example.demo.mapper.EmpMapper,而<select id="list">...</select>。
总结一下,解决方案步骤应该是:检查映射绑定、验证XML路径配置、确认资源打包、检查mybatis配置、清理项目,最后确认方法签名和XML元素是否匹配。</think>针对`org.apache.ibatis.binding.BindingException: Invalid bound statement not found com.example.demo.mapper.EmpMapper.list`异常,以下是分步解决方案:
---
### **1. 检查接口与XML映射文件的绑定**
- **问题**:`EmpMapper`接口中的`list`方法未在对应的XML文件中定义,或方法名不一致[^3]。
- **解决方法**:
1. 确认`EmpMapper`接口中存在`list`方法。
2. 在`EmpMapper.xml`中检查是否有对应的SQL语句,例如:
```xml
<select id="list" resultType="com.example.demo.entity.Emp">
SELECT * FROM emp
</select>
```
3. 使用`MyBatisX`插件验证接口与XML的跳转关系是否正常。
---
### **2. 验证XML文件路径配置**
- **问题**:XML文件未正确打包到项目中,或路径配置错误[^4]。
- **解决方法**:
1. 若XML文件在`src/main/java`目录下,需在`pom.xml`中添加资源过滤:
```xml
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
```
2. 若XML文件在`resources`目录下,确保路径与配置一致,例如:
```yaml
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
```
---
### **3. 检查MyBatis配置**
- **问题**:MyBatis未正确扫描XML文件或配置缺失[^3]。
- **解决方法**:
1. 在`application.yml`中确认以下配置:
```yaml
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.example.demo.entity
```
2. 检查`EmpMapper.xml`的`namespace`是否与接口全限定名一致:
```xml
<mapper namespace="com.example.demo.mapper.EmpMapper">
```
---
### **4. 清理并重新构建项目**
- **问题**:旧编译文件残留导致XML未被加载。
- **解决方法**:
1. 执行Maven命令清理项目:
```bash
mvn clean install
```
2. 检查`target/classes`目录下是否包含`EmpMapper.xml`。
---
### **5. 验证方法签名与SQL映射**
- **问题**:方法参数或返回类型不匹配。
- **解决方法**:
1. 确保接口方法`List<Emp> list();`与XML中的`id="list"`一致。
2. 检查返回值类型`resultType`是否与实体类`Emp`对应。
---
### **总结**
上述步骤覆盖了90%的此类异常场景。若仍无法解决,可检查:
- 依赖中是否包含`mybatis-plus-boot-starter`;
- 是否在启动类添加了`@MapperScan("com.example.demo.mapper")`。
---
阅读全文
相关推荐
















