MyBatis BindingException: Invalid bound statement (not found)

问题

在一个项目中,Spring Boot整合mybatis,使用xml文件对接口进行映射。出现异常

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.dao.RoleDao.listRole

MyBatis

Spring Boot常见的mybatis xml写法

    直接在接口的目录下写与接口名相同的xml文件(注意检查是否生成xml文件)。 在resource目录下,创建相同的接口包名,在写接口名相同的xml文件 在resource目录下,任意创建目录,使用mybatis.mapper-locations来指定目录文件。

基本方法

1、检查IDEA下是否生成了相应的xml文件,展开target目录

如果没有生成对应的xml文件,那看看为啥没有生成了哦,若是在java目录下写的xml文件,IDEA编译后会把resource下的文件放到target的classpath下,src下的Java文件编译生成.class文件放入classpath下,其他文件会忽略的。

所以在pom.xml添加下面代码,让IDEA不要忽略xml文件就可以了哦,刷新一下pom,重新编译下,如还是没有,那就别这样写了,使用第二种方式。

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

2、检查对应的xml的namespace与接口名是否对应,IDEA可以直接跳转,看看跳转是否正确,id与方法名是否对应,可以直接复制,检查一下返回类型是否对应。

3、确保xml文件没有问题后,检查一下mybatis.mapper-locations指定的位置。

有点博客说,将classpath修改为classpath*,改一下呗,试一试。(注意:yml文件中注意空格问题,mybatis顶格)

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

4、可以在接口方法名上直接使用注解方式,测试是否可以使用。

@Select("select * from role")
List<Role> listRole();

如果不可以,需要先检查注解方式为啥不可以了哦。

5、在resource目录下,将 xml 文件的路径与 dao 层接口保持一致。 application.yml中的mybatis.mapper-locations可以不用配置。

注意:IDEA中在resource下创建多层时,仔细检查创建的是不是多层路径。

下面创建方式,Windows识别为包含·的一层目录 下面创建方式,Windows识别为多层目录,还可以单层目录一层一层的创建。 在IDEA中显示都是一样的

若还是不可以,项目刚新建的话,那就先把这个删掉,重新创建一个。

经验分享 程序员 微信小程序 职场和发展