SpringBoot中使用MyBatis-Plus是如何解决Invalid bound statement (not found)这个异常的

本篇文章主要介绍关于我在SpringBoot中使用MyBatis-Plus是如何解决Invalid bound statement (not found)这个异常的。我先抛一些我在这个途中遇到的一些问题,看看各位了解不了解。

  1. Mybatisxml文件不在resouce下时该如何配置。
  2. 如何去指定mapper-Location的配置。
  3. classpath*classpath的区别是啥
  4. 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引入进去的(这个就是我前文提到的架构改变了)。注意这两个是重点。我猜测他们不会配置的点应该就是这个原因了吧。

解决问题

竟然知道了问题就开始解决问题。

Mybatisxml文件不在resouce下时该如何配置。

Mybatis中如果xml文件不在resource目录下的话,默认打包是会被忽略的,所以需要在pom文件中加一段配置。

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

改完这个后重新build一下,注意去查看下target文件夹下是否xml文件。

如何去指定mapper-Location的配置
mybatis-plus:
  mapper-locations: classpath*:top/**/*.xml
## top是我具体文件夹可以不要,  **的意思代表一个或者多个目录
classpath*classpath的区别是啥

这个问题是重点要考的记一下,带*的话会扫描jar包下面的文件,不带*只会扫描当前项目。

Invalid bound statement (not found)出现的原因是什么?如何排查这个问题

这个报错的出现,就是代表你的mapper文件跟xml映射不到。如果你确保你的框架没有问题下,其它的代码都能映射得到的情况,那么你就要注意了,首先你的xml文件的名字跟Mapper文件是不是一致的,方法名跟xmlid是不是一致的。如果你这两个都对了,再去查你的mapper-locations的配置,这里没问题,再去查编译包。看看xml编译到了不。如果这些都没问题。那人跟代码只要一个能跑就行。

废话时间

其实使用xml跟使用注解的形式都能完成需求,没多大的区别。但是使用xml的可读性,以及易维护性。个人觉得比注解方式强太多了。此次问题的出现,关键在于架构的改变,架构者一想把xmlresource移除,二又想把业务模块热插拔。这个想法是好的。但是做事做一半真的不太可取。

本篇首发于牧码人博客转载请加上此标示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Spring Boot项目同时使用MybatisMybatis-Plus时,可能会遇到"Invalid bound statement (not found)"的错误。这个错误通常是由于mapper接口和mapper.xml没有正确映射导致的。以下是一些可能导致这个错误的常见原因和解决方法: 1. 检查mapper接口和mapper.xml的命名规范是否一致。Mybatis-Plus默认使用接口名作为mapper.xml的命名规范,如果不一致,可能导致映射失败。 2. 确保mapper接口被正确扫描到。在Spring Boot项目,可以使用@MapperScan注解来指定mapper接口的扫描路径。确保注解的路径包含了所有的mapper接口。 3. 检查mapper.xml的位置是否正确配置。可以使用mybatis.mapper-locations属性来配置mapper.xml的位置。确保该属性指向了正确的路径,并且mapper.xml文件存在于指定的路径下。 4. 确保配置文件mybatis-plus.mapper-locations属性正确配置。这个属性用于指定Mybatis-Plus的mapper.xml的位置。同样,确保该属性指向了正确的路径,并且mapper.xml文件存在于指定的路径下。 5. 确保mapper接口和mapper.xml之间的映射正确配置。在mapper接口的方法名和mapper.xml的sql语句的id应该一一对应。确保没有遗漏或重复。 如果以上步骤都检查无误,但仍然出现"Invalid bound statement (not found)"的错误,可以尝试重启项目或清除缓存,有时候这些问题可能是由于缓存或其他临时问题引起的。 综上所述,当在Spring Boot项目同时使用MybatisMybatis-Plus时,如果出现"Invalid bound statement (not found)"的错误,可以检查mapper接口和mapper.xml的命名规范、扫描路径、配置文件的属性配置以及映射关系等方面的配置是否正确。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值