H2 資料庫
介紹
H2資料庫 (嵌入式資料庫)
用途: 可以再啟動Spring Boot時被生成出來 ,在運行結束後被銷毀 ,用完即丟
常用於單元測試 ,降低程式對實體資料庫的依賴
也就是說 ,任何一台電腦 ,不需要安裝任何軟體 ,都可以運行該單元測試
MySQL vs H2
使用 MySQL 資料庫進行單元測試的運作流程
- 在 MySQL 創建table 準備數據
- 運行 Spring Boot 單元測試
- 啟動 Spring 容器 ,創建 Bean
- 執行 @Test 單元測試
- 存取 MySQL 資料庫的數據
- 單元測試運行完畢 ,銷毀Spring 容器 ,IntelliJ 顯示單元測試結果
使用H2 資料庫進行單元測試的運作流程
- 運行 Spring Boot 單元測試
- 啟動 Spring 容器 ,創建 Bean
- 創建 H2 資料庫
- 執行 @Test 單元測試
- 存取 H2 資料庫的數據
- 單元測試運行完畢 ,銷毀 Spring 容器 ,銷毀 H2 資料庫 ,IntelliJ 顯示單元測試結果
如何開始使用 H2 資料庫
pom.xml
https://mvnrepository.com/artifact/com.h2database/h2
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>test</scope>
</dependency>
application.properties
如果要在單元測試裡面去使用 H2 資料庫的話
那麼我們就會需要去添加一個 單元測試專用的 Spring Boot 設定檔
在裡面去設定 H2 資料庫的連線資訊


這兩個 application.properties 是完全獨立的 ,不會互相干擾
所以如果在 main 這邊的設定檔有新增甚麼設定 ,請務必也要複製貼上到 test 的設定檔
避免單元測試測試失敗
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=sa
// [Spring Data JPA]
// 加上這行設定 Spring Boot 在執行 SQL 語法時才不會和 Hibernate 預設的設定互相影響
spring.jpa.hibernate.ddl-auto=none
完成設定檔後需要新增 schema.sql 、 data.sql

schema.sql [創建 table]
CREATE TABLE IF NOT EXISTS student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
score DOUBLE,
graduate BOOLEAN,
create_date TIMESTAMP
);
data.sql [插入數據]
INSERT INTO student (name, score, graduate, create_date) VALUES ('Amy', 90.3, true, '2021-09-01 10:20:33');
INSERT INTO student (name, score, graduate, create_date) VALUES ('Rom', 34.6, false, '2021-08-10 17:21:14');
INSERT INTO student (name, score, graduate, create_date) VALUES ('Judy', 100.0, true, '2021-09-05 12:19:48');
INSERT INTO student (name, score, graduate, create_date) VALUES ('Mike', 87.2, true, '2021-09-03 15:01:15');
schema.sql 、 data.sql 這兩個檔案是 Spring Boot 專門為 H2 資料庫所提供的一項功能