org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) --整合Mybatis报错解决方案

在整合MyBatisPlus时遇到BindingException,提示找不到对应的mapper.xml。检查包括:1)确认mapper.xml的namespace与接口类全名匹配;2)检查配置文件中mapper扫描路径设置是否正确;3)排查目录层级问题;4)确保maven编译时包含xml文件。问题解决方法是在pom.xml中添加资源配置,确保xml文件在target目录下被编译。

在整合mybatis时遇到了这样的坑,报错如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.atguigu.eduservice.mapper.EduTeacherMapper.teacherListQuery
	at com.baomidou.mybatisplus.core.override.PageMapperMethod$SqlCommand.<init>(PageMapperMethod.java:261) ~[mybatis-plus-core-3.0.5.jar:na]
	at com.baomidou.mybatisplus.core.override.PageMapperMethod.<init>(PageMapperMethod.java:58) ~[mybatis-plus-core-3.0.5.jar:na]
	at com.baomidou.mybatisplus.core.override.PageMapperProxy.cachedMapperMethod(PageMapperProxy.java:70) ~[mybatis-plus-core-3.0.5.jar:na]
	at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:63) ~[mybatis-plus-core-3.0.5.jar:na]
	at com.sun.proxy.$Proxy90.teacherListQuery(Unknown Source) ~[na:na]
	at com.atguigu.eduservice.service.impl.EduTeacherServiceImpl.teacherListQuery(EduTeacherServiceImpl.java:31) ~[classes/:na]
	at com.atguigu.eduservice.service.impl.EduTeacherServiceImpl$$FastClassBySpringCGLIB$$ba8ae57e.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]

看报错日志大概能够知道是接口方法和mapper.xml之间的映射关系出现了问题,找不到对应的xml,mapper.xml文件没有加载到或者加载错误。具体是什么原因还要进一步排查。

1.首先查看mapper.xml的namespace是否是对应接口类的全名(包名+类名)

<mapper namespace="com.atguigu.eduservice.mapper.EduTeacherMapper">

2.查看配置文件中mapper的扫描路径是否正确(按自己的项目配置)

mybatis-plus:
  configuration:
    #这个配置会将执行的sql打印出来
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #mapper文件扫描路径
  mapper-locations: classpath:com/atguigu/eduservice/mapper/*/*.xml

3.以上都修改正确后问题依然没有解决。网上还有说可能是因为目录层级问题。我这里没有这种情况。所以需要继续排查。

4.最后需要注意的是,如果你的项目是maven项目,请你在编译后,到target目录下看一看有没有对应的xml文件,因为maven默认是不编译的。我的问题在于我是直接把xml文件放到了java类的目录里。对应的maven项目,只会把resource目录的文件输出,所以当然就找不到对应的mapper.xml文件了。

因此,你需要在你的pom.xml的<build></build>里面,加这么一段:

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

​

加上以后,重启项目,可以发现target目录下加载了mapper.xml。问题终于得到解决。

 

<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、付费专栏及课程。

余额充值