信任,是溝通的母語。
MariaDB 是 MySQL 衍生,因為 Sun 入主了 MySQL,而 Oracle 又入主了 Sun,開始有了一點 “銅錢” 的味道,為了延續 “道統”,就有 MariaDB 應運而生。我們搞技術的就不管政治,就是挑一個 “開源”的道路繼續走下去,另外,一個資料庫系統通常會配合一個資料庫 “管理”軟件,方便使用,我們原本選擇開源的明星:HeidiSQL,但HeidiSQL 只有 Windows 版本,因此,在Mac, 我選擇了 Tableplus,相同地,安裝請參考 REFERENCE。(不過 Tableplus 好像不是 open-source, 只是提供一個功能受限—(只提供一個TABLE)—的免費版本,有時間再找一個好用的 open-source,也歡迎讀者推薦)。
Spring Boot 與 SQL 資料庫溝通的技術,稱作 JDBC,Java Database Connection。為了減少一回的份量,讓讀者和筆者都可以輕鬆一點,把這個主題拆分兩個部分,分兩回來說明:
在這一回中,我們介紹如何透過 Spring Boot 連接 MariaDB,對於其他的資料庫,大家可以比照。在創建專案時,選擇 SQL / Spring Data JDBC 及 SQL / MySQL Driver, 為了 Web 的功能,我們也加入 Web / Spring Web,創建後,在 pom.xml (Maven) 中會有以下設定:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
…
</dependencies>
連接 MariaDB 使用的類別為 JdbcTemplate,這個類別使用到的參數設定在 src/main/resources/application.properties,我們只需要設定這些參數,剩餘的部分,如何時進行連接等等, Spring boot 都默默完成了,我們就是享受這個成果。
spring.datasource.url=jdbc:mysql://localhost:3306/iron2019
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.http.encoding.force=true
iron2019是資料庫名稱,帳號(root),密碼(password),必須依實際狀況設定。在 driver-class-name中設定使用的資料庫,在早期的版本,使用 com.mysql.jdbc.Driver, 已經建議再不使用 (deprecated), 最後一行是編碼限制(通常設定為UTF-8)。 在執行之前,還要MariaDB 資料庫中創建表格(Create table),可以透過 MySQL Client,或是資料庫管理軟件 TablePlus (有兩件事要做:創建資料庫 & 創建表格)
SQL command for create table:
create table users (
id int not null auto_increment,
name varchar(255) not null,
email varchar(255) not null,
primary key(id)
);
TablePlus 執行的畫面如下:(免費的 TablePlus 只支援一個表格)。
在這一回(與下一回)中,我們延用第 22 回的資料結構,只是在前面文章中我們用了一個在記憶體的 H2Database 資料庫,而在這一回裡,我們使用了 MariaDB,讀者可以作個比對。UserController.java, User.java 都可以延用,略作修改,例如 User.java 中拿掉了 @Entity 及 @GenerateValue,同時,我們把 name, email 的修飾語 final 都拿掉了,因為我們會在產生後設定其值
User.java:
public class User {
public User() {
super();
this.name="unknown";
this.email="unknown.email";
}
private long id;
private String name;
private String email;
}
Source > Generate Getters and Setters...
Source > Generate Constructor with Fields…
Source > Generate toString()…
最後 Source 那三行是用 Eclipse 自動生成相關的編碼。
在這一回中,我們就介紹到這裡,在下一回中我們再完成編碼,加以執行。
Mac 用 Homebrew 安裝 MariaDB
HeidiSQL for Mac(Tableplus)