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目录下被编译。
摘要由CSDN通过智能技术生成

在整合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。问题终于得到解决。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)是由于MyBatis-Plus无法找到正确的映射语句造成的错误。 这个错误通常发生在使用MyBatis-Plus时,由于映射语句的配置问题导致无法正确绑定。可能有几个原因导致这个问题出现: 1. 未正确配置映射文件路径:如果你没有正确配置MyBatis-Plus的Mapper扫描路径,可能会导致MyBatis-Plus无法找到正确的映射语句。请确保你已经在配置文件中正确指定了Mapper扫描路径,并且此路径包含了你的映射文件。 2. 映射语句没有正确定义:如果你的映射语句没有正确定义,比如语句名称不匹配或者语句不存在,那么MyBatis-Plus将无法找到正确的映射语句。请确保你的映射语句名称正确,并且确保对应的映射语句文件存在。 3. 映射语句所在的包路径错误:如果你的映射语句所在的包路径不正确,MyBatis-Plus将无法找到正确的映射语句。请确保你的映射语句所在的包路径与配置文件中指定的Mapper扫描路径一致。 综上所述,要解决这个问题,你可以按照以下步骤进行操作: 1. 确保你已经正确配置了MyBatis-Plus的Mapper扫描路径,可以使用@MapperScan注解或者在配置文件中进行配置。 2. 检查并修正映射语句的定义,确保语句名称与映射文件中的定义一致,并且确保映射文件存在。 3. 检查并修正映射语句所在的包路径,确保包路径与配置文件中指定的Mapper扫描路径一致。 通过以上步骤的检查和修正,你应该能够解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值