iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
4
Modern Web

站在Web前端人員角度,學習 Spring Boot 後端開發系列 第 7

Day 07 - Spring Boot 資料庫 H2 + Entity

  • 分享至 

  • xImage
  •  

混日子就是虐待自己 ,這比死亡更可怕 --《Doctors》

Spring Boot Database - H2

這次的實作使用H2 Database,H2 是一個由 Java 撰寫的關聯型資料庫,也是一個記憶體資料庫(In memory database),將內容存放在記憶體(內存)當中,而非傳統型資料庫存放在外部記憶體中。

這樣的資料庫設計是為了消除訪問硬碟來減少響應的時間,但由於資料都存放在內存,所以在伺服器重開或故障時會有資料遺失的風險。

Spring Boot 配置H2

(1)在pom.xml添加jar package

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

熱部署模組,修改檔案後,可以立刻重新啟動應用

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

(2)DB環境基礎設置application.yml

 server:
  port: 9100 # 伺服器的port號

spring:
  h2:
    console:
      enabled: true
	datasource:
    url: jdbc:h2:mem:todolist # h2 database 連接位址
    driver-class-name: org.h2.Driver # 配置driver
    username: sa # database 用戶名
    password:  # database 密碼

	jpa:
    database-platform: org.hibernate.dialect.H2Dialect

(3)訪問 h2 資料庫

將應用啟動後,進入http://localhost:9100/h2-console/,可以看見一個 h2 DB 的操作介面,再點Connect就可以查看資料庫,這樣就成功連接一個名為todolist的資料庫了。
https://ithelp.ithome.com.tw/upload/images/20200916/20118857w9UWLijEik.png

創建第一個實體(Entity)

資料庫建立完畢後,我們就可以在main -> java → com.xxx.xxxxx → 底下來建立資料類別-Todo.java(下方有資料夾結構表)

|-- src
    |-- main
        |-- java
             |-- com.xxx.xxxxx
                  |-- entity
                    |-- Todo.java
                  |-- TodoListApplication.java # 程式進入點

利用@Entity Annotation Todo class 是一個Entity,@Table映射其至Todo 表,接著聲明這個表格擁有的欄位,最後我們要定義欄位的getter & setter,按下⌘ + N(Mac) 或Ctrl + N(Windows)會跳出選項進行選擇,點擊「Getter and Setter」,會快速幫我們生成setter and getter的方法。

import javax.persistence.*;

@Entity
@Table
public class Todo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Integer id;

    @Column
    String task;

    @Column
    Integer status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTask() {
        return task;
    }

    public void setTask(String task) {
        this.task = task;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
}

@Entity 宣告此類是一個實體,並映射至一個數據表,Entity名稱預設為class名稱。

@Table 映射資料表的名稱,預設為Entity名稱。

@Id 聲明為一個主鍵

@GeneratedValue(strategy = GenerationType.IDENTITY) 主鍵生成的策略。

  • GenerationType.TABLE用一個特定數據庫保存主鍵
  • GenerationType.SEQUENCE 用序列的方式
  • GenerationType.IDENTITY 自動增長生成
  • GenerationType.AUTO 程式指定主鍵

@Column 聲明是個欄位,可以針對此欄位設置參數,如name, unique, length等。

一樣進入http://localhost:9100/h2-console/,Connect 之後可以看到以下畫面,查看表結構。
可以至Java persistence document查看其他Annotation用法
https://ithelp.ithome.com.tw/upload/images/20200916/20118857xMzqyQSeLp.png


今天實作如何創建資料庫,並讓Entity映射至資料表,明天再來解釋為什麼Entity可以與資料庫對映。


上一篇
Day 06 - Spring Boot 代辦事項實作介紹&環境設定
下一篇
Day 08 - Spring Boot JPA 與 Lombok 套件 & DAO
系列文
站在Web前端人員角度,學習 Spring Boot 後端開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言