解决Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (no...

这篇博客讲述了在遇到MyBatis中的`BindingException: Invalid bound statement (not found)`错误时,如何排查和解决。作者按照Mapper接口的规范检查了namespace、方法名、参数类型和返回类型,但问题仍然存在。尝试改变包结构后问题依旧。最后,通过调整包名为连续的子目录形式,如`com/kuang/dao`,成功解决了问题。博主感谢狂神的MyBatis教程对自己的帮助。

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

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。

Mapper接口开发需要遵循以下规范:
  1. Mapper.xml文件中的namespace与mapper接口的类路径相同。

  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

发现这个错误后,经过各种百度,CSDN,核对各种方法名,包名,仍未发现问题。

后来发现这样一条博客:

https://blog.csdn.net/weixin_44757863/article/details/109301707

 于是,我不再使用以“·”分割子目录的方法,而是使用分次创建子目录。

结果这样还是不行,还是报一样的错误。

最终,我参考下面同学的解决方法:

https://www.cnblogs.com/lixiaobin123/p/12651510.html

以这样的方式创建包:com/kuang/dao

 最后成功运行!

最后,感谢狂神的MyBatis课程!受益匪浅!

https://www.bilibili.com/video/BV1NE411Q7Nx?p=20&spm_id_from=pageDriver

### 解决 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 错误 当遇到 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 这一错误时,通常意味着 MyBatis 无法找到指定的 SQL 映射语句。以下是几种常见的解决方案: #### 方法一:确保 Mapper 文件中的 SQL 语句 ID 和 Java 代码中调用的方法名一致 如果 Mapper 接口中的方法名称与对应的 XML 配置文件内的 `<select>` 或其他标签下的 id 属性不匹配,则会触发此异常。因此,应当仔细核对两者之间的命名是否完全相同。 ```xml <!-- UserMapper.xml --> <select id="getUserById" parameterType="int" resultType="com.example.User"> SELECT * FROM users WHERE user_id = #{userId} </select> ``` ```java //UserMapper.java public interface UserMapper { @Select("SELECT * FROM users WHERE user_id = #{userId}") public List<User> getUserById(int userId); } ``` 注意,在上面的例子中,`id` 的值应与接口里的函数签名相吻合[^2]。 #### 方法二:确认资源文件被正确打包至 JAR 中 有时即使路径无误,由于 Maven 构建过程配置不当也可能导致此类问题的发生。可以通过检查项目的 `pom.xml` 来验证是否有如下设置来包含所有的映射器XML文件: ```xml <build> <resources> <!-- 添加 resource 节点用于加载 mapper xml 文件 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.yml</include> <include>**/*.yaml</include> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` 此外,还需保证这些文件确实存在于预期的位置,并且在编译后的 jar 包内可以正常访问[^4]。 #### 方法三:升级依赖版本以兼容更高版本框架 对于某些特定情况下,比如使用较新的Spring Boot 版本而MyBatis Plus尚未提供相应支持的时候,可能会因为API变更等原因引发该类异常。此时建议查看官方文档或社区反馈了解是否存在已知的问题以及相应的修复措施;必要时考虑更新相关库到最新稳定版以便获得更好的适配性和性能优化[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值