關於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文件路徑的三種配置方式,快來試試吧~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章