iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Cloud Native

【하나, 둘, ready, get set, go】系列 第 20

【하나, 둘, ready, get set, go】Day 20 - 使用 GORM 對 SQL 資料庫進行新增資料 (Create)

  • 分享至 

  • xImage
  •  

前情提要

昨天,我們將 GORM 與 GORM for SQLite driver 安裝好

今天就要開始使用 GORM 向 SQL 資料庫進行資料新增啦~

實際操作

我們這邊會以 Go 官網上的這篇教學為例,來進行資料庫欄位設計

https://go.dev/doc/tutorial/web-service-gin

首先,我們在 database 資料夾下,新增一個 models.go 的檔案

接著,新增 Album struct,並定義以下欄位 ID、Title、Artist、ReleaseDate 跟相關 method

package database

type Album struct {
    ID          string `json:"id" gorm:"primary_key"`
    Title       string `json:"title"`
    Artist      string `json:"artist"`
    ReleaseDate string `json:"releaseDate"`
}

// TableName 設定資料表名稱
func (Album) TableName() string {
    return "Album"
}

models.go 講解

  1. 定義 Album struct,並在資料欄位新增 tag (json、gorm),json tag 是可以讓後面 API 回傳時直接使用對應的 key,gorm tag 則是對應到 GORM 與 SQL 資料庫間的關係 -> Line 3~8
  2. 透過 GORM 內的 Tabler interface 定義的 TableName() string 來設定在 SQL 資料庫內的資料表名稱 -> Line 11~13

接下來,我們回到昨天新增的 database.go 來進行修改一下

package database

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

var DB *gorm.DB

// ConnectDB 連線到 SQLite 資料庫
func ConnectDB() {
    db, err := gorm.Open(sqlite.Open("db.sqlite"))    
    if err != nil {
    	panic(err)
    }    
    
    err = db.AutoMigrate(
    	&Album{},
    )
    if err != nil {
    	panic(err)
    }    
    
    migrator := db.Migrator() 
    migrator.HasTable(&Album{})   
    
    DB = db
}

database.go 講解

這裡主要會講解與昨天不同之處

  1. 修改 Line 17 db.AutoMigrate,將剛剛寫好的 Album struct 傳入,設定為自動遷移
  2. 新增 Migrator,並檢查是否存在 Album 這張資料表 -> Line 24~25

接下來,我們在專案的當前目錄 (it15th) 新增一個資料夾,叫做 repository,並在資料夾內新增一個叫做 album.go 的檔案

Create Function 寫在這隻檔案 (album.go) 內

func Create(a database.Album) error {
    result := database.DB.Create(&a)
    return result.Error
}

接著我們到 main.go,來新增資料吧

package main

import (
    "demo/database"
    "demo/repository"
    
    "github.com/google/uuid"
)

func main() {
    database.ConnectDB()

    album := database.Album{
        ID:          uuid.New().String(),
        Title:       "The Modern Sound of Betty Carter",
        Artist:      "Betty Carter",
        ReleaseDate: "1960",
    }

    err := repository.Create(album)
    if err != nil {
    	panic(err)
    }
}

main.go 講解

這裡主要也是講解與昨天不同之處

  1. 透過 Google 撰寫的 uuid 套件,來產生 UUID -> Line 6
go get github.com/google/uuid
  1. 宣告一個 Album struct 的物件 album,並給值 -> Line 12~17
  2. 透過 repository 的 Create() Function 來進行新增資料 -> Line 20

執行後,就可以利用像是 DB Browser for SQLite 這類的工具來開啟 db.sqlite 資料庫檔案,來確認是否有新增啦~

https://ithelp.ithome.com.tw/upload/images/20230907/20140363om3E7FaOE4.png

以上 Sample Code 可以在我 GitHub 上找到
https://github.com/leoho0722/it15th

總結

今天我們透過 GORM 來實作向 SQL 資料庫進行新增資料

明天要來介紹如何透過 GORM 來向 SQL 資料庫進行資料讀取的操作

明天見~

相關資源

  1. https://go.dev/doc/tutorial/web-service-gin
  2. https://gorm.io/docs/

上一篇
【하나, 둘, ready, get set, go】Day 19 - 使用 GORM 連接 SQL 資料庫
下一篇
【하나, 둘, ready, get set, go】Day 21 - 使用 GORM 對 SQL 資料庫進行讀取資料 (Read)
系列文
【하나, 둘, ready, get set, go】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言