前言
在Mybatis项目中引入Mybatis-Plus框架,发现项目的xml直接放在src/main/java中,而不是src/main/resources。
引入Mybatis-Plus为了一致性也将xml直接放在src/main/java下,发现报错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
文件结构
我的项目文件结构概览如下:
src/main/java
org.example.dao
|____ config
|____ controller
|____ ......
|____ dao
|____ |____ mapper
|____ |____|____ AAAMapper.xml
|____ |____|____ BBBMapper.xml
|____ |____|____ CCCMapper.xml
|____ |____|____ ......
|____ |____ AAAMapper.java
|____ |____ BBBMapper.java
|____ |____ CCCMapper.java
|____ |____ ......
|____ ......
|____ MainApplication.java
src/main/resources
application.yml
解决
配置文件application.yml中添加:
mybatis-plus:
mapper-locations: classpath*:com/ys7/saas/algorithmtraining/dao/mapper/*Mapper.xml
如果是application.properties也是一样的,只是要转换一下格式。
pom.xml文件除了依赖以外,添加<resources>配置,指定目录为src/main/java,包含所有文件后缀为Mapper.xml的xml文件,当然这里<include>**/*Mapper.xml</include>也可以写成<include>**/*.xml</include>,这样就包含所有xml文件。
......
<dependencies>
......
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter-test</artifactId>
<version>3.4.2</version>
</dependency>
</dependencies>
<build>
......
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*Mapper.xml</include>
</includes>
</resource>
</resources>
</build>
MainApplication.java
/**
* 服务启动类
* MapperScan指定mapper扫描路径
*/
@MapperScan("org.example.dao")
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}