关于SpringBoot项目整合Mybatis时XXXMapper.xml文件存放位置你了解多少?

我们在SpringBoot项目整合Mybatis时或多或少遇到过这个问题,怎么他的XXXMapper.xml文件放在resources目录下了?哎?他的又在src/main/java/xxx目录下?

带着这些疑问,我们来了解下不同位置下XXXMapper.xml文件到底该怎么处理。

1 SpringBoot整合Mybatis

1.1 pom依赖
<!-- mybatis依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>
<!-- druid数据库连接池依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<!-- mysql连接依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>5.1.25</version>
</dependency>
1.2 数据库连接配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=admin
1.3 创建实体类
public class User {
    private Integer id;
    private String username;
    private Integer age;
    private String address;
	//省略getter和setter方法
}
1.4 创建Mapper接口,添加查询方法

我们一般在创建XXXMapper.java接口后,需要在接口上面添加@Mapper注解,用于Spring容器扫描我们编写的接口,但随着我们每创建一个Mapper接口,就要添加一次注解,稍微有一点麻烦,这里我们使用一个快捷的方式,如下:
在我们项目启动入口,XXXApplication.java中添加一个@MapperScan注解


@SpringBootApplication
@MapperScan(basePackages = "com.wanik.mybatis.mapper")  //在项目启动时扫描这个路径下的Mapper文件
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }

}

紧接着我们创建Mapper接口


public interface UserMapper {
	//查询所有用户信息
    List<User> getAllUser();
}

2 XXXMapper.xml文件位置

2.1 创建一个UserMapper.xml文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wanik.mybatis.mapper.UserMapper">
    <select id="getAllUser" resultType="com.wanik.mybatis.bean.User">
        select * from user
    </select>
</mapper>
2.2 存放位置
2.2.1 方式一:放在与Mapper接口同级目录

存放位置如图:
同级目录
然后编写测试方法查看运行结果:


@SpringBootTest
class MybatisApplicationTests {

    @Autowired
    UserMapper userMapper;

    @Test
    void test() {
        List<User> allUser = userMapper.getAllUser();
        System.out.println(allUser);
    }

}

运行后报错:
报错
报错提示没有找到com.wanik.mybatis.mapper.UserMapper路径下的getAllUser方法可以进行绑定:

原因一:getAllUser方法名没有对应到
原因二:没有找到UserMapper.xml文件,所以无法绑定

方法名是对应到的,我们排除原因一,然后我们查看target路径下有没有UserMapper.xml文件
not found
我们发现target路径下没有找到UserMapper.xml文件

在之前我们只扫描Mapper接口,但却没有告诉Mapper.xml文件的位置,所以在项目启动时没有加载Mapper.xml文件,我们还需做如下配置:
在pom.xml中<build> 节点添加如下配置,用于加载资源:

<build>
    <resources>
        <!-- 扫描src/main/java下所有xx.xml文件 -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <!-- 扫描resources下所有资源 -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

再次运行,此时就查到的数据:
success

2.2.2 方式二:在resources创建Mapper接口同名文件夹用来存放Mapper.xml文件

如果觉得上面配置太过繁琐,我们可以将pom.xml —> <build>—><resources>配置注释掉,之前的@MapperScan注解保留,然后在resources目录下创建com.wanik.mybatis.mapper包,将mapper.xml文件存放在该路径下:

路径
然后再次运行之前的测试方法,结果运行成功:

运行成功

2.2.3 方式三:在resources目录下创建mapper文件夹存放mapper.xml

路径
在application.properties中做如下配置:

mybatis.mapper-locations=classpath:/mapper/*.xml

配置完成后再次运行:
success
这种方式也是成功的,且更简单

以上就是SpringBoot整合Mybatis中Mapper.xml文件路径的三种配置方式,快来试试吧~~


版权声明:本文为qq_33418407原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。