昨天,我們將 GORM 與 GORM for SQLite driver 安裝好
今天就要開始使用 GORM 向 SQL 資料庫進行資料新增啦~
我們這邊會以 Go 官網上的這篇教學為例,來進行資料庫欄位設計
首先,我們在 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"
}
Album struct
,並在資料欄位新增 tag (json、gorm),json tag 是可以讓後面 API 回傳時直接使用對應的 key,gorm tag 則是對應到 GORM 與 SQL 資料庫間的關係 -> Line 3~8
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
}
這裡主要會講解與昨天不同之處
db.AutoMigrate
,將剛剛寫好的 Album struct
傳入,設定為自動遷移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)
}
}
這裡主要也是講解與昨天不同之處
go get github.com/google/uuid
album
,並給值 -> Line 12~17
Create()
Function 來進行新增資料 -> Line 20
執行後,就可以利用像是 DB Browser for SQLite 這類的工具來開啟 db.sqlite
資料庫檔案,來確認是否有新增啦~
以上 Sample Code 可以在我 GitHub 上找到
https://github.com/leoho0722/it15th
今天我們透過 GORM 來實作向 SQL 資料庫進行新增資料
明天要來介紹如何透過 GORM 來向 SQL 資料庫進行資料讀取的操作
明天見~