前言
本篇文章主要介绍关于我在SpringBoot
中使用MyBatis-Plus
是如何解决Invalid bound statement (not found)
这个异常的。我先抛一些我在这个途中遇到的一些问题,看看各位了解不了解。
- 当
Mybatis
的xml
文件不在resouce
下时该如何配置。 - 如何去指定
mapper-Location
的配置。 classpath*
跟classpath
的区别是啥- Invalid bound statement (not found)出现的原因是什么
以上就是我遇到这个问题之后总结的三个问题。
缘由
作者来了一下新公司,这边的框架看的我很闷,特别是关于mybatis的一些用法。这边的sql都是用注解写在Mapper文件上。
例如:
@Select("SELECT id,status, " +
" actual_usage_id usage_id," +
" location_id ," +
" group_id ," +
" breakdown_Level_id, " +
" receive_persion_id " +
"FROM " +
" t_repair_workorder " +
" ${ew.customSqlSegment} ")
List<IndexDutyPageVo> dutyFaultPage(@Param(Constants.WRAPPER) Wrapper<?> wrappser);
整个项目全是这种写法,我一开始以为是规范。后面问了一个老员工才知道。说以前这个项目是写在xml的,但是后面改了一下架构之后xml的配置就扫描不到了。嗯嗯嗯…
这边的项目结构,xml文件不是放在resouce
下,并且具体的业务包是跟maven
引入进去的(这个就是我前文提到的架构改变了)。注意这两个是重点。我猜测他们不会配置的点应该就是这个原因了吧。
解决问题
竟然知道了问题就开始解决问题。
当Mybatis
的xml
文件不在resouce
下时该如何配置。
Mybatis
中如果xml文件不在resource
目录下的话,默认打包是会被忽略的,所以需要在pom文件中加一段配置。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>***.xml
## top是我具体文件夹可以不要, **的意思代表一个或者多个目录
classpath*
跟classpath
的区别是啥
这个问题是重点要考的记一下,带*
的话会扫描jar包下面的文件,不带*
只会扫描当前项目。
Invalid bound statement (not found)出现的原因是什么?如何排查这个问题
这个报错的出现,就是代表你的mapper
文件跟xml
映射不到。如果你确保你的框架没有问题下,其它的代码都能映射得到的情况,那么你就要注意了,首先你的xml
文件的名字跟Mapper
文件是不是一致的,方法名跟xml
的id
是不是一致的。如果你这两个都对了,再去查你的mapper-locations
的配置,这里没问题,再去查编译包。看看xml
编译到了不。如果这些都没问题。那人跟代码只要一个能跑就行。
总结
其实使用xml
跟使用注解的形式都能完成需求,没多大的区别。但是使用xml
的可读性,以及易维护性。个人觉得比注解方式强太多了。此次问题的出现,关键在于架构的改变,架构者一想把xml
从resource
移除,二又想把业务模块热插拔。这个想法是好的。但是做事做一半真的不太可取。
到此这篇关于SpringBoot使用MyBatis-Plus解决Invalid bound statement异常的文章就介绍到这了,更多相关SpringBoot 异常内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!