iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

今日目標,安裝資料庫、設定資料庫連線資訊、建立 Model。

資料庫

小弟我本來就有 XAMPP 所以資料庫就用 XAMPP 的 MySQL,如果你比較習慣 MySQL Workbench 那就繼續用吧!

XAMPP

XAMPP是一個把Apache網頁伺服器與PHP、Perl及MariaDB集合在一起的安裝包,允許使用者可以在自己的電腦上輕易的建立網頁伺服器。

小弟只是為了用 XAMPP 提供的 MySQL 以及其介面 phpmyadmin (比較偏愛這個介面)而已,如同前一天提到的,我們不需要自己裝 Web Server 因為 Spring Boot 框架就有附。

  • XAMPP Download
  • 選擇 8.0 開頭的
  • 裝完後執行它,會看到它的介面
  • 之後我們通常只會用 MySQL 那欄,之後記得啟動專案前要先把它打開並 Start,啟動後會變綠色的
  • 如果要用到 phpmyadmin,記得要把 Apache 也 start,然後進到 http://localhost/phpmyadmin/index.php
  • 預設帳號是 root,密碼是空白(空著就好)

MySQL

資料庫設定

  1. 先建立一個資料庫,資料庫名稱就跟專案名稱一樣吧,cards
  2. 打開 src/main/resources/application.properties,並加入:
    # Database settings
    spring.datasource.url = jdbc:mysql://localhost:3306/cards
    spring.datasource.username = root
    spring.datasource.password =
    spring.jpa.hibernate.ddl-auto = update
    
    • spring.datasource.url:資料庫的 JDBC URL,後面的 cards 就是資料庫的名稱
    • spring.datasource.username:資料庫連線的使用者帳號
    • spring.datasource.password:資料庫連線的密碼
    • spring.jpa.hibernate.ddl-auto:會根據你所創建的 Entity 來自動建立資料表
  3. 打開 pom.xml,並將下方加入 <dependencies> </dependencies> 之間:
    <!-- sql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    • 目前 pom.xml 的 dependencies 的配置是
    • 會發現它是紅色字,這表示還沒被加入,我們點畫面最右側的 maven
    • 打開後,點選如圖中的符號
    • 這時候 Maven 就會開始下載,並將其加入,看見他們都變灰色字就 ok 了

User Model

我們要來建立我們的 user 資料表,預期欄位有 id、username、email、password

  1. 在 com.example 底下建立一個 package,名稱是 user
  2. 在 user package 裡面建立一個 java class,名稱是 UserModel,這個檔案會映射到資料表
  3. 在 UserModel 輸入:
    package com.example.user;
    
    import javax.persistence.*;
    
    @Entity
    @Table(name = "user")
    public class UserModel {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        @Column(unique = true)
        private String username;
    
        @Column(unique = true)
        private String email;
    
        @Column
        private String password;
    }
    
    • @Entity:宣告為 Entity 類型,並映射至一個資料表
    • @Table:映射資料表的名稱,預設是使用 class 名稱作為資料表名稱
      • name:自定義資料表名稱,上述例子即是定義資料表名稱為 user
    • @Id:宣告為主鍵(Primary Key)
    • @GeneratedValue:主鍵的生成方式
      • strategy
        • GenerationType.IDENTITY:自動增長型,最常使用
        • GenerationType.TABLE:透過別的表格來定義,最少用
        • GenerationType.SEQUENCE:序列方式生成
        • GenerationType.AUTO:程式自行決定
    • @Column:欄位,可以使用 name、length、nullable、unique... 等客製化
  4. 在程式碼的地方點選右鍵 -> Generate... -> Getter and Setter,然後把那 4 個都選起來之後點選 OK,就會自動產生 getter 跟 setter,如下:
    package com.example.user;
    
    import javax.persistence.*;
    
    @Entity
    @Table(name = "user")
    public class UserModel {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        @Column(unique = true)
        private String username;
    
        @Column(unique = true)
        private String email;
    
        @Column
        private String password;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    
  5. 將 com.example.cards 的 CardsApplication 內容更改為如下(主要增加了 @EntityScan):
    package com.example.cards;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    
    @SpringBootApplication
    @EntityScan({
        "com.example",
    })
    public class CardsApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(CardsApplication.class, args);
        }
    
    }
    
    • @EntityScan:會去掃描這個路徑底下的所有 package,並自動幫有使用 @Entity 註解的 class 建立資料表
  6. 點選右上角的那個綠色三小形來啟動 server,如果你本來就啟動狀態,記得先停止再啟動一次
  7. 去資料庫的介面,會發現 cards 資料庫底下多了一個 user 的資料表,這樣就完成了!

註解(Annotation)

在 Java 中,以 @ 開頭的都稱為註解,做的事情很簡單,就是有人幫你寫好了一些功能、驗證等,只要把註解加上去就會根據註解的聲明範圍(class, method, variable, etc.)自動處理並注入,類似於你去呼叫別人的函式,這麼做能提升可讀性和重用性。

參考資料


上一篇
Day 05 - Package By Feature
下一篇
Day 07 - 懶到極致的配置
系列文
Spring Boot... 深不可測31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言