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

报错内容

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.skl.dao.StudentMapper.getStudent

	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:108)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:35)
	at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:95)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
	at com.sun.proxy.$Proxy6.getStudent(Unknown Source)
	at com.skl.test.Test01.getStudentTest(Test01.java:16)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
`改了大半天都没找到错误,最后在不起眼的角落发现了。`

错误来源

在这里插入图片描述

`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]。
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码两年半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值