整合Mybatis报BindingException Invalid bound statement (not found)

今天在学习Shiro的时候重头开始新建了个springboot的项目

在后面到数据库核对,整合Mybatis的时候一直报错
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
这里就是无法正常的使用mapper.xml的sql
在网上各种查。。经历了三个多小时的折磨终于解决了。。
在此记录一下几种排查方法。

  1. mapper接口和mapper.xml是否在同一个包(package)下?名字是否一样(仅后缀不同)?
比如,接口名是NameMapper.java;对应的xml就应该是NameMapper.xml
  1. mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致?
比如,你接口的包名是com.abc.dao,接口名是NameMapper.java,那么你的mapper.xml的namespace应该是com.abc.dao.NameMapper
  1. 接口的方法名,与xml中的一条sql标签的id一致
比如,接口的方法User findByName(String name);那么,对应的xml里面一定有一条是<select id="findByName" **>****</select>
  1. 如果接口中的返回值List集合(不知道其他集合也是),那么xml里面的配置,尽量用resultMap(保证resultMap配置正确),不要用resultType

  2. 最后,如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xml文件,因为maven默认是不编译的,因此,你需要在你的pom.xml的里面,加这么一段:

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

我就是坑在了第5点上,折腾了三个多小时,大家及时发现。
记得是加在pom里面的标签里面。

其实遇到问题5一般用的都是IDEA,因为IDEA 默认不会编译源码文件夹中的 XML 文件,如果把XML直接像放src目录下就会出现这个问题,要想比较规范的解决,就要把XML放在resources目录下 然后在
application.yaml文件内mybaties的配置:

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

这样配置后,只要是resources/mapper目录下或者是子目录下的所有.xml文件都会被简析出来。这个解决方法和上面那个解决方法是互斥的,只采用一种即可。

你可能感兴趣的:(mybatis,java,xml,spring,maven)