一、背景

最近在写个人项目的时候,出现了org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)这个错误。尝试了很多解决方法,终于解决了这个错误。在这里总结一下,以便查阅。

二、可能的原因:

1. mapper中namespace跟接口不对应可能导致的错误

Spring报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

2. springboot中的application.properties或application.yml没有指定mybatis的两行配置:

application.properties:

mybatis.typeAliasesPackage=xin.suttonprog.test.entity
mybatis.mapperLocations=classpath:mapper/*.xml

application.yml:

mybatis:
  mapper-locations: classpath:mapper/xml/*.xml
  type-aliases-package: xin.suttonprog.test.entity

3. IDE没有将XML文件编译

如果你的IDE是IDEA,并且你的XML文件放置在src/main/java目录下。IDEA不会将XML文件一起编译。这个时候就要在pom文件的build标签下声明:

<build>
      <plugins>
            <!-- 省略 -->
      </plugins>
      <resources>
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.yml</include>
                  <include>**/*.properties</include>
                  <include>**/*.xml</include>
                  <include>**/*.tld</include>
              </includes>
              <filtering>false</filtering>
          </resource>
          <resource>
              <directory>src/main/java</directory>
              <includes>
                  <include>**/*.yml</include>
                  <include>**/*.properties</include>
                  <include>**/*.xml</include>
                  <include>**/*.tld</include>
              </includes>
              <filtering>false</filtering>
          </resource>
      </resources>
  </build>

4. 可能你的springboot项目没有启动自动装配。

在启动类上只是加上@SpringBootConfiguration的注解,没有加上自动装配的注解。加上@SpringBootApplication就可以了。

Spring报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

因为@SpringBootApplication是一个组合注解:
Spring报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

第一个注解@SpringBootConfiguration原本是一个@Configuration,所以@SpringBootConfiguration就是表明这是一个配置类,开发者可以在这个类中(上面的IPServiceApplication)配置Bean。所以IPServiceApplication扮演的角色就像Spring中的applicationContext.xml文件的角色。

第二个注解@EnableAutoConfiguration表示表示开启自动化装配。SpringBoot中的自动化配置是非侵入式的,在任何时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置。

第三个注解@ComponentScan表示完成包的扫描,就是Spring中的功能。由于@ComponentScan注解默认扫描的类都在当前类的所在包下面,所以最好将启动类放在根包之中。

Spring报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

三、参考

https://blog.csdn.net/qq_35981283/article/details/78590090

https://blog.csdn.net/u012685794/article/details/51953237

《SpringBoot+Vue全栈开发实战》 -- 王松 著

 

相关文章: