当前位置: 首页 > news >正文

[Bug解决] Invalid bound statement (not found)出现原因和解决方法

1、问题描述

在写了一个很普通的查询语句之后,出现了下面的报错信息

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.oauth.mapper.WxVisitorQrBeanMapper.selectByComIdAndEmpId

at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:230) ~[mybatis-3.4.2.jar:3.4.2]

at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.2.jar:3.4.2]

at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.2.jar:3.4.2]

at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.2.jar:3.4.2]

at com.sun.proxy.$Proxy220.selectByComIdAndEmpId(Unknown Source) ~[na:na]

at com.xxx.oauth.service.UserServiceImpl.getVisitorQR(UserServiceImpl.java:319) ~[classes/:1.0-UNIWIN]

2、问题分析

遇到问题咱先不慌,瞪大眼睛看看报错信息。

报错的关键词是 Invalid bound statement,百度翻译一下,是说绑定语句无效。

这是什么意思呢?

脑袋瓜子飞速转动,大脑CPU超负荷运转。。。

突然灵光一现,怀疑可能是在说mapper接口和mapper.xml文件对应不上

于是找到mapper和mapper.xml所在目录点开看看。

这一看就发现不对劲了,xml对应的命名好像更长一些,在仔仔细细的检查一翻后,发现是xml命名中将小r写成了大写的R。

至此,问题得到解决。

3、问题扩展

为了未雨绸缪,防患于未然,将其它可能导致Invalid bound statement的原因进行整理。

Invalid bound statement 问题的本质是mapper接口和mapper.xml文件映射出错,以下都是可能导致两者映射出错的原因及解决方案:

① mapper.xml中的namespace属性的值和实际的mapper接口的路径不一致。解决办法是瞪大眼睛,仔细检查一下。

② mapper接口中的方法名和mapper.xml中的id属性的值不一致。解决办法是同样是瞪大眼睛,仔细检查一下。

③ 如果以上三种(扩展的两种)情况都排除,那极有可能是target文件夹中,没有将mapper.xml文件编译和构建。针对这种情况, 有两种可能性:

  • 可能一:在xml配置文件中,没有指定Maven 构建过程中需要包含的资源文件。
<!-- 添加配置,避免 mybatis 的mapper.xml文件被漏掉 -->
<resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource>
</resources>

上面的配置是指定.properties和.xml 后缀的配置文件,放在 src/main/resources 目录下,并且在Maven构建过程中,将它们复制到target构建目录中,以便运行时能够被访问到。

  • 可能二:idea在运行时出错了,没有在target中生成xml文件。 这种情况只需 clean删除target文件,然后重新编译启动运行即可。

http://www.lryc.cn/news/302915.html

相关文章:

  • Qt:Qt3个窗口类的区别、VS与QT项目转换
  • uni-app判断不同端
  • 计算机网络-网络设备防火墙是什么?
  • Code Composer Studio (CCS) - Breakpoint (断点)
  • 人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096
  • 分层钱包HD钱包
  • 基于python+mysql的宠物领养网站系统
  • 机器学习入门--门控循环单元(GRU)原理与实践
  • GitHub Actions
  • harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed
  • MySQL Replication
  • redis分布式锁redisson
  • 制作一个简单的html网页
  • js filter,every,includes 过滤数组
  • jenkins自动化部署
  • 【JavaScript】分支语句
  • 【开源】SpringBoot框架开发农家乐订餐系统
  • OSQP文档学习
  • ONLYOFFICE 8.0:引领数字化办公新纪元
  • 「Linux」基础命令
  • 三防平板丨平板终端丨加固平板丨户外勘测应用
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
  • npm报错之package-lock.json found. 问题和淘宝镜像源过期问题
  • 大模型提示学习、Prompting微调知识
  • vue 导出,下载错误提示、blob与json数据转换
  • 代码随想录算法训练营|二叉树总结
  • rtt的io设备框架面向对象学习-uart设备
  • PyCharm - Script parameters (脚本参数)
  • Security6.2 中的SpEL 表达式应用(权限注解使用)
  • 软考笔记--信息系统开发方法(下)