Like Share Discussion Bookmark Smile

J.J. Huang   2019-03-30   Spring Boot   瀏覽次數:

SpringBoot - 第十六章 | MyBatis整合 (XML方式)

在前面的文章中 第十五章 - SpringBoot MyBatis整合 (註解方式) 介紹如何使用MyBatis的透過註解的方式基本訪問資料庫。

這邊來介紹使用Spring Boot整合MyBatis,通過xml的方式來做使用。

使用範例

資料庫範例

這邊用Customer來做範例

1
2
3
4
5
6
7
8
9
10
11
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(64) DEFAULT NULL COMMENT '姓名',
`age` smallint(3) DEFAULT NULL COMMENT '年齡',
`create_by` varchar(50) NOT NULL COMMENT '建立人員',
`create_dt` datetime NOT NULL COMMENT '建立時間',
`modify_by` varchar(50) DEFAULT NULL COMMENT '修改人員',
`modify_dt` datetime DEFAULT NULL COMMENT '修改時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

相關配置

  • 加入pom的依賴

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
    </dependency>
  • src/main/resources/application.properties中配置資料源訊息

    1
    2
    3
    4
    5
    6
    7
    8
    # 資料源配置
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    # 指定mybatis去哪裡掃描mapper
    mybatis.mapper-locations=classpath:mapper/*.xml

建立實體 (Entity)

此時參數名稱故意跟資料庫欄位名稱不一樣,下方透過xml內的resultMap來做對應。

建立資料訪問對象 (Dao)

建立Mapper.xml

Entity裡面的參數名稱和資料庫欄位名稱不一樣的時候,可以設定對應的方式,就是透過以下方式做對應的;
column表示Entity裡面的參數名稱,property 表示資料庫欄位名稱。

1
2
3
4
5
6
7
8
9
<resultMap id="BaseResultMap" type="com.jj.learning.springboot.chapter16.domain.Customer">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="age" property="age" jdbcType="INTEGER" />
<result column="createBy" property="create_by" jdbcType="VARCHAR" />
<result column="createDt" property="create_dt" jdbcType="TIMESTAMP" />
<result column="modifyBy" property="modify_by" jdbcType="VARCHAR" />
<result column="modifyDt" property="modify_dt" jdbcType="TIMESTAMP" />
</resultMap>

單元測試

測試結果

其他

.xml可以放在哪裡呢?

兩個位置可以放,第一個是直接放在UserMapper所在的包下面,但是需要在Application設定
@MapperScan(basePackages = “com.jj.learning.springboot.chapter16.domain”)
設定後CustomerMapper上方的@Mapper就可以移除了。

注:放在這裡的.xml會被自動掃描到,但是有另外一個Maven帶來的問題,就是java目錄下的xml資源在項目打包時會被忽略掉,所以,如果.xml放在包下,需要在pom.xml文件中再添加如下配置,避免打包時java目錄下的XML文件被自動忽略掉

1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>

第二個地方,.xml也可以直接放在resources目錄下,這樣就不用擔心打包時被忽略了,但是放在resources目錄下,又不能自動被掃描到,需要添加額外配置。例如我在resources目錄下建立mapper目錄用來放mapper文件。

1
2
# 指定mybatis去哪裡掃描mapper
mybatis.mapper-locations=classpath:mapper/*.xml

注:如此配置之後,mapper就可以正常使用了。注意第二種方式不需要在pom.xml文件中配置文件過濾。

註:以上參考了
程序猿DD-翟永超Spring Boot整合MyBatis 文章。
江南一点雨最简单的SpringBoot整合MyBatis教程 文章。