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下的文件放到targetclasspath下,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、检查对应的xmlnamespace接口名是否对应,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中显示都是一样的

在这里插入图片描述
若还是不可以,项目刚新建的话,那就先把这个删掉,重新创建一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值