IntelliJ IDEA:Invalid bound statement (not found)

        在日常开发中程序报错是家常便饭了,下面说说 Invalid bound statement (not found) 是怎么造成的,应该怎么解决。

问题

第一种:namespace和mapper文件不一致

 mapper.xml文件namespace与mapper文件不匹配,报错。

第二种:方法名与sqlId不一致

方法名称与相应sql查询语句id不匹配,也会出现Invalid bound statement (not found)。

第三种:构建项目时文件丢失

有时候发现项目一切都已经没有问题了但就是报错,这时候就要查查是不是构建出错了。 

解决办法

        针对前两种,就要仔细检查mapper.xml文件namespace与mapper文件是否完全匹配,方法名称与相应sql查询语句id是否完全匹配。对于这两种情况可以安装一个插件MyBatisX(小蓝鸟)。

当不存在前两种问题时,点击对应的小鸟图标,就会跳转对应的代码页

        对于mapper文件没有参与构建的情况,我们可以使用maven工具对target进行clean并重新构建,直至全体文件都构建其中。

除此之外,还有将mapper文件置于java包下也会出错,但是一般不会出现,还有就是配置问题。

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

余额充值