org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)新的异常解决方案

文章详细记录了一次在使用MyBatisRepository注解整合MyBatis与Spring框架时遇到的异常问题,包括异常详情、解决方案尝试、配置检查过程以及最终通过调整mapper文件存放位置解决问题的经过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先异常如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.threegrand.urdm.system.dao.UserDao.saveUser
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)
    at com.sun.proxy.$Proxy19.saveUser(Unknown Source)
    at com.threegrand.urdm.system.service.UserService.saveUser(UserService.java:20)
    at com.threegrand.urdm.system.service.UserService$$FastClassBySpringCGLIB$$caacda27.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:266)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
    at com.threegrand.urdm.system.service.UserService$$EnhancerBySpringCGLIB$$33d9263b.saveUser(<generated>)
    at com.threegrand.urdm.userservice.UserServiceTest.testAdd(UserServiceTest.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    。。。。

昨天下午出现的,第一次遇到这个错误,非常神奇的与网上的经验不同,他们的解决方法我都一一测试过了,还是不好使:
方案一
方案二
方案三
我主要从后面两个方案中获得灵感的,首先看我的配置,
我使用的是mybatisRepository注解,将mybatis接口注入:

  <!-- MyBatis配置 -->
    <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:/mybatis/configuration-mybatis.xml"/>
        <!-- 显式指定Mapper文件位置 -->
        <property name="mapperLocations">
            <list>
                <value>classpath*:/mapper/UserDao.xml</value>
            </list>
        </property>
        <property name="configurationProperties">
            <props>
                <!-- mapUnderscoreToCamelCase属性将表中列名的下划线映射为JavaBean属性的驼峰式命名,默认为false -->
                <prop key="mapUnderscoreToCamelCase">true</prop>
            </props>
        </property>
    </bean>

之前使用mybatis plugins将所有潜在的错误都排查过了,当然还有启动日志,还重写了项目,并且检查了每个可能发生错误的配置,但是还是不好使,我把xml文件和Dao接口放在一个包名下,然后让注解去扫描,进行动态代理,但是依然找不到问题所在,我使用debug模式模拟方法调用还是不行。听说要将xml文件放到config-mybatis.xml中的mappers中,但是还是不好使,在idea 下的代码资源文件中和测试资源文件中都试过了,不好使,很衰的样子,我跟另一个朋友也讨论了,但是没有结果。

后来把mapper映射文件放到资源目录下,进行扫描竟然好使了。
如图:
项目结构

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)MyBatis访问报错的一种情况。这个错误通常出现在执行SQL语句时找不到对应的映射语句时。 解决这个问题的步骤如下: 1. 首先,确保你的Mapper接口和XML文件中的namespace一致。你可以按住Ctrl键点击接口,看是否能跳转到对应的XML文件。如果不能跳转,说明namespace不正确。 2. 检查主启动类上是否标注了@MapperScan注解,并且注解的参数是mapper接口所在包的全包名。或者,你也可以在Mapper接口上标注@Mapper注解。但是注意,这两者不能同时使用。 通过这些步骤,你应该能够解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的问题。如果问题仍然存在,请确保你的SQL语句在XML文件中被正确定义,并且没有拼写错误或者其他语法错误。如果还有其他问题,可以提供更多的错误信息或者代码片段,以便更好地帮助你解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mybatis访问报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...](https://blog.csdn.net/weixin_34402408/article/details/86024348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【报错解决】org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)](https://blog.csdn.net/qq_50914927/article/details/127091350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值