本身使用Springboot搭建web项目,以前都是使用注解形式来执行sql获取查询内容,此次本承着闲得无聊试一试的想法,突发奇想一想用xml的方式执行sql。很走心的参照本身以前spring项目的书写格式,顺便百度了也就几十个springboot搭建的问题,终于把xml的相关配置弄好。天知道,get请求经过浏览器访问接口怎么就报了invalid bound statement (not found)的错误。java
OK,这点小事怎么可贵住我,接着在度娘和谷哥之间换了千百种姿式找解决方案。总结出如下这几种方法,能够解决大多数invalid bound statement (not found)的问题:mysql
================ 华丽的分割线 ================web
【1】spring
网上总结的通常缘由 Mapper interface和xml文件的定义对应不上,须要检查包名,namespace,函数名称等可否对应上。 按如下步骤一一执行:
一、检查xml文件所在的package名称是否和interface对应的package名称一一对应
二、检查xml文件的namespace是否和xml文件的package名称一一对应
三、检查函数名称可否对应上
四、去掉xml文件中的中文注释
五、随意在xml文件中加一个空格或者空行而后保存
sql
【2】浏览器
在使用IDEA开发时,若是打包时*Mapper.xml没有自动复制到class输出目录的mapper类包下,则须要在pom文件中添加mybatis加载配置文件的配置! 以下:springboot
<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加载配置文件,完美解决遇到的问题了。bash
【3】mybatis
在application.yml中修改:app
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接口放到一个目录下来了,浏览器中访问接口,接口也访问通了。
真是山重水复疑无路,绝望尽头就是柳暗花明处。