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

Mybatis报BindingException:Invalid bound statement (not found)异常

一、前言

本文的mybatis是与springboot整合时出现的异常,若使用的不是基于springboot,解决思路也大体一样的。

二、从整合mybatis的三个步骤排查问题

但在这之前,我们先要知道整合mybatis的三个重要的工作,如此才能排查,且往下看。

2.1 pom.xml配置**Mapper.xml文件的构建路径

我们打开pom文件如下:

 <build><resources><resource><directory>src/main/java</directory><filtering>false</filtering><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>*</include><include>**/*.xml</include></includes></resource></resources></build>

这部分代码的作用是指定需要编译到taget目录下的资源文件。我们的程序运行,都是执行编译好的taget目录下的内容,若taget里找不到xml文件资源就会报错Invalid bound statement (not found)。

每个人的项目配置都可能有些区别,但在这里我们只需要关注<includes>标签即可。还有对于不同的项目,xml的存放位置也可能不同,有的存在于src/main/java代码下,有的存在于src/main/resources。

<include>**/*.xml</include>
这行代码是用于构建存在于src/main/java代码中的xml文件。

<include></include>
<include>**/
.xml</include>
这行代码是用于构建存在于src/main/resources代码中的所有文件。

上述,我们可以排查第一个可能抛出Invalid bound statement (not found)异常的情况,我们可以通过查看编译好的taget目录,如下:

情况一:

原代码文件目录:
在这里插入图片描述

编译失败的情况:
在这里插入图片描述

编译成功的情况:
在这里插入图片描述
情况二:
源代码文件目录:
在这里插入图片描述

编译失败:
在这里插入图片描述

编译成功:
在这里插入图片描述

有时,一直编译不成功,那就将taget重新删除,再编译。

2.2 配置mapper类的包扫描路径

这个步骤与Invalid bound statement (not found)异常无关,但是它也是整合mybatis重要的步骤之一,这里也说明一下,有两种方式实现,可根据自己的项目情况使用。(两者择其一)

通过注解的方式扫描:
在这里插入图片描述

通过配置类方式扫描:
在这里插入图片描述

这个步骤的目的是将我们定义的mapper类装配到我们的ioc容器中。

若没有扫描,启动时就会直接报找不到mapper的错误,无法运行项目。

2.3 application.yml文件中配置**Mapper.xml文件的扫描路径

值得一说的是,这一步骤的扫描是建立在步骤一的基础之上的,若编译好的taget目录都没有目标文件,那这一步骤就更不用说了。

一:

这里的扫描路径配置,还需要注意自己的项目使用的原始mybatis还是mybatis-plus,它们的配置也有区别的,如下:

原始mybatis:

mybatis:mapper-locations: classpath:/cn/anycase/demo/mapper/xml/*Mapper.xml

mybatis-plus:

mybatis-plus:mapper-locations: classpath:cn/anycase/demo/mapper/xml/*.xml

本例用的是mybatis-plus:
在这里插入图片描述

二:
使用mybatis-plus,有时可以省略这个扫描路径的配置,所以我们看到的有些项目少了这个配置,但它并没有错,且能正常运行。(原始mybatis是否也可以,本人未做相关测试,有知道的评论区可以说一声)
在这里插入图片描述

三:
还有一个需要注意的点,前面步骤一说了,mapper.xml文件可能存在于src/main/java代码中,或存在于src/main/resources资源中,因此我们的配置路径也有所不同,如下:
在这里插入图片描述

Invalid bound statement (not found)这个异常,在常规下,通过上述的三个步骤可以百分百解决。但我们都知道,工作中出总会出现各种奇葩异常。下面介绍,且往下看。

未完待续…晚点补充太累了。

三、非常规的Invalid bound statement (not found)异常

3.1 文件名导致的异常

3.2 使用了自定义SqlSessionFactory导致的异常

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

相关文章:

  • HttpRunner3.x(1)-框架介绍
  • pytest学习和使用20-pytes如何进行分布式测试?(pytest-xdist)
  • 三、Python 操作 MongoDB ----非 ODM
  • 求最大公约数和最小公倍数---辗转相除法(欧几里得算法)
  • 音视频开发_获取媒体文件的详细信息
  • Springboot集成Swagger
  • Vue全新一代状态管理库 Pinia【一篇通】
  • STM32 -4 关于STM32的RAM、ROM
  • 第一个 Qt 程序
  • Spring注解驱动开发--AOP底层原理
  • 对象的动态创建和销毁以及对象的复制,赋值
  • JVM调优,调的是什么?目的是什么?
  • docker部署zabbix监控
  • C语言刷题(6)(猜名次)——“C”
  • 两年外包生涯,感觉自己废了一半....
  • 【python】喜欢XJJ?这不得来一波大采集?
  • 公司测试员用例写得乱七八糟,测试总监制定了这份《测试用例编写规范》
  • LeetCode 热题 HOT 100【题型归类汇总,助力刷题】
  • 【Java进阶篇】—— File类与IO流
  • Mysql 竟然还有这么多不为人知的查询优化技巧,还不看看?
  • MATLAB算法实战应用案例精讲-【智能优化算法】海洋捕食者算法(MPA) (附MATLAB和python代码实现)
  • Spring @Profile
  • Vue3电商项目实战-个人中心模块4【09-订单管理-列表渲染、10-订单管理-条件查询】
  • 【十二天学java】day01-Java基础语法
  • 【面试题】闭包是什么?this 到底指向谁?
  • 汽车4S店业务管理软件
  • 基于 pytorch 的手写 transformer + tokenizer
  • 算法小抄6-二分查找
  • 大学四年..就混了毕业证的我,出社会深感无力..辞去工作,从头开始
  • C语言数据结构初阶(6)----链表常见OJ题