前言:
容易出现Invalid bound statement (not found) :com.xxx错误,该错误是由于spring没有找到mapper.xml文件引起的,请检查如下方面:
- 接口中方法名称如findAll()与Mapper.xml文件中 id="findAll"是否一致
- Mapper.xml文件中的 namespace的属性值与接口文件路径一致,比如有接口为xxx.xxx.UserMapper,则 namespace=“xxx.xxx.UserMapper”
- Mapper.xml文件名称要与接口名称一致,比如UserMapper.xml,则接口名称为UserMapper。
- 项目配置文件application.properties中的mapper.xml的位置配置是否正确(写错一个字符都不行),正确配置的例子如下:
mybatis.typeAliasesPackage=com.entity
mybatis.mapper-locations=classpath:/mapper/*Mapper.xml
切记不要错误配置为:
spring.mybatis.typeAliasesPackage=com.entity
spring.mybatis.mapper-locations=classpath:/mapper/*Mapper.xml
mybatis、spring、server是application.properties中三大并列的配置范畴,不是主从关系不要搞混了。
另外需要注意的地方是:
1.如果在接口上配置了@Mapper注解,则没有必要在启动程序的类public class DemoApplication{ …main()…}的前添加MapperScan,比如@MapperScan(“com.example.demo.dao”)。
2.项目的目录结构中启动程序public class DemoApplication{ …main()…}的包如果是 com.example.demo,则项目中新建的包要求在com.example.demo基础上进行添加,比如添加com.example.demo.dao;com.example.demo.controller等。由于不需要依赖注入实体类的包不需要遵循这个结构,比如我们可以在com.entity下面创建实体类。
下面给出一个正确的案例,该例实现了spring boot整合mybatis的xml配置和注解配置两种方式:
步骤1 在http://maven.apache.org/download.cgi下载maven。先配置maven的下载依赖包的镜像网站,在settings.xml里面找到中的内容,用下面替换:
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
步骤2 在eclipse的Windowd/Preferences/Maven/User Settings的Global settings和User settings中导入settings.xml文件
步骤3 在start.spring.io上下载demo模板,并导入该maven项目
步骤4 进入项目设计,具体如下:
项目结构:
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demoJDBC</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<