IDEA+Maven+Springboot:invalid bound statement (not found) 解决办法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qixinbruce/article/details/82794774

自己使用Springboot搭建web项目,之前都是使用注解形式来执行sql获取查询内容,这次本承着闲得无聊试一试的想法,突发奇想想用xml的方式执行sql。很走心的参照自己之前spring项目的书写格式,顺便百度了也就几十个springboot搭建的问题,终于把xml的相关配置弄好。天知道,get请求通过浏览器访问接口怎么就报了invalid bound statement (not found)的错误。

OK,这点小事怎么难得住我,接着在度娘和谷哥之间换了千百种姿势找解决方案。总结出以下这几种方法,可以解决大多数invalid bound statement (not found)的问题:

======================== 华丽的分割线 ===========================

【1】

网上总结的一般原因
Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上。
按以下步骤一一执行:
1、检查xml文件所在的package名称是否和interface对应的package名称一一对应
2、检查xml文件的namespace是否和xml文件的package名称一一对应
3、检查函数名称能否对应上
4、去掉xml文件中的中文注释
5、随意在xml文件中加一个空格或者空行然后保存

【2】

在使用IDEA开发时,如果打包时*Mapper.xml没有自动复制到class输出目录的mapper类包下,则需要在pom文件中添加mybatis加载配置文件的配置!
如下:

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

通过在pom文件中添加mybatis加载配置文件,完美解决遇到的问题了。

【3】

在application.yml中修改:

mybatis:
  mapper-locations: classpath:mybatis/mapper/mysql/*.xml

======================== 华丽的分割线 ===========================

以上是总结谷哥和度娘上输出最多的解决方案,但我自己项目的问题其实远比上述解决方案要显得白痴:

如第【2】中解决办法所说,编译后的xml文件没有输出到mapper包下,就在各种找方案,怎么能达到这种效果。

尝试过第【2】种方案无果,后尝试重新使用注解的方式,发现sql正常执行,说明注解的方式可以使用,那一定是xml文件的方式哪里配置的不对。

再后来直接把xml文件放到mapper包下,发现编译后xml文件就输出到了mapper包下,说明把xml和mapper接口放在一个目录下是能解决这个问题的。不过一个目录下既放xml又放java文件感觉很奇怪,就继续找方法,看怎么能把xml文件和mapper分开,但是编译后的文件放在一个目录下,也就是xml方式可以正常进行正常的sql使用。

在百度无果几近绝望的时候,偶然一篇帖子仿佛让我看到了希望的曙光。里面说idea编译器中文件夹要一层一层的创建,一次性把整个目录创建出来中间妄图用“.”分隔开,编译器是不识别的。所以将信将疑的尝试着在resources目录下对应mapper接口的目录层级,一层一层把对应目录也创建出来,最后把xml文件扔进新创建的目录下。

奇迹真的发生了~~!!!!!!

就这样,编译后xml和mapper接口放到一个目录下来了,浏览器中访问接口,接口也访问通了。

真是山重水复疑无路,绝望尽头就是柳暗花明处。

猜你喜欢

转载自blog.csdn.net/qixinbruce/article/details/82794774