一、背景
最近在写个人项目的时候,出现了org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)这个错误。尝试了很多解决方法,终于解决了这个错误。在这里总结一下,以便查阅。
二、可能的原因:
1. mapper中namespace跟接口不对应可能导致的错误
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就可以了。
因为@SpringBootApplication是一个组合注解:
第一个注解@SpringBootConfiguration原本是一个@Configuration,所以@SpringBootConfiguration就是表明这是一个配置类,开发者可以在这个类中(上面的IPServiceApplication)配置Bean。所以IPServiceApplication扮演的角色就像Spring中的applicationContext.xml文件的角色。
第二个注解@EnableAutoConfiguration表示表示开启自动化装配。SpringBoot中的自动化配置是非侵入式的,在任何时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置。
第三个注解@ComponentScan表示完成包的扫描,就是Spring中的功能。由于@ComponentScan注解默认扫描的类都在当前类的所在包下面,所以最好将启动类放在根包之中。
三、参考
https://blog.youkuaiyun.com/qq_35981283/article/details/78590090
https://blog.youkuaiyun.com/u012685794/article/details/51953237
《SpringBoot+Vue全栈开发实战》 -- 王松 著