mybatis出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

本文详细解析了MyBatis中常见的Invalid bound statement (not found)异常,并提供了详细的排查步骤及解决方案,帮助开发者快速定位并解决问题。

mybatis常会出现下面异常,这一般是xml映射文件有错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

按以下步骤一一执行:
1.检查Mapper文件名是否和接口的名称一致.
2.sqlMapConfig.xml中是否加载了配置文件.
3:检查xml文件所在的package名称是否和interface对应的package名称一一对应
4:检查xml文件的namespace是否和xml文件的package名称一一对应
5:检查函数名称能否对应上
6:去掉xml文件中的中文注释
7:随意在xml文件中加一个空格或者空行然后保存

一般来说到此就可以排除错误了。

  以上步骤除第5步,其他步骤没什么问题。第5步看起来这么怪异的解决方式,实际上是触发了ide的自动编译功能。由于xml文件在编译的时候,不一定总能立即从源目录复制到class文件的编译目录(MyEclipse经常出这个问题),有时候你源目录中的xml文件已经修改好了,而class所在的目录里面还是旧的。因此真正确定有效的方式是将正确的xml文件复制到class输出目录。

  还有种情况会出这个错误,比如配置xml映射文件需要满足特定要求
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
      p:dataSource-ref="dataSource" 
      p:configLocation="classpath:mybatis-config.xml">
    <property name="mapperLocations">
        <list>
            <value>classpath*:mapper/com/xxx/**/*Mapper.xml</value>
            <value>classpath*:dao/com/xxx/**/*Mapper.xml</value>
        </list>
    </property>
</bean>

如上只有Mapper结尾的xml文件才会被Mybatis扫描到,这个时候如果忘记了这个规则,xml使用了其他名称,如xxxDao.xml。这样xml的配置就不会加入到Mybatis存储配置的一个map对象里去,也会出现 Invalid bound statement 的错误。解决方法就是把xml文件改名即可。

`org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 错误通常表示 MyBatis 找不到指定的 SQL 映射语句,以下是一些可能的解决方法: #### 检查映射文件与接口绑定 此错误可能是 Mybatis 中的映射文件跟接口文件绑定错误导致的,需要反复检查关于 Mapper 与映射文件的细节之处,确保映射文件中的命名空间(namespace)与对应的 Mapper 接口的全限定名一致,并且 SQL 语句的 id 与 Mapper 接口中的方法名一致[^2]。 示例: Mapper 接口: ```java package com.kangning.system.mapper; import java.util.List; import com.kangning.system.entity.SysDictData; public interface SysDictDataMapper { List<SysDictData> selectDictDataList(); } ``` 映射文件(`SysDictDataMapper.xml`): ```xml <mapper namespace="com.kangning.system.mapper.SysDictDataMapper"> <select id="selectDictDataList" resultType="com.kangning.system.entity.SysDictData"> SELECT * FROM sys_dict_data </select> </mapper> ``` #### 检查映射文件路径配置 要保证 MyBatis 能够找到映射文件。在 MyBatis 的配置文件中,需要正确配置映射文件的路径。如果使用 Spring Boot 集成 MyBatis,可在 `application.properties` 或 `application.yml` 中进行配置。 `application.properties` 示例: ```properties mybatis.mapper-locations=classpath:mapper/*.xml ``` `application.yml` 示例: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml ``` #### 检查编译问题 有时候编译过程可能会出现问题,导致映射文件没有正确复制到目标目录。可以尝试清理项目并重新编译。 在 Maven 项目中,可使用以下命令: ```sh mvn clean install ``` #### 检查缓存问题 缓存可能会导致旧的映射信息被使用,可尝试使缓存失效或重启项目。在一些开发工具(如 IntelliJ IDEA)里执行该操作,原本的缓存文件虽不会立即从磁盘物理删除,但会被标记为无效,开发工具后续会重新构建缓存数据 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值