了解 SQLite 和 GORM 的基本操作之後,就要把它們應用在 To-do List 的專案中了!
今天會從安裝環境開始,之後建立資料表等,摘要如下:
那我們就開始吧!
首先,要先安裝這兩個套件,要記得把路徑轉到與 go.mod
同一層,輸入以下指令才能順利安裝唷!
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
輸出:
完成安裝之後,你就會在 go.mod
檔案裡面看見已經新增了這兩個套件。這樣就成功了!
再來就是要建立資料表!原本我們在 model/task.go
中,有建立一個叫做 Task 的資料結構對吧,現在我們要把改變成可以與資料庫資料連結~
需要 import "gorm.io/gorm"
這個套件,然後更改 Task struct 裡面 ID 的欄位,改成直接抓取資料庫裡面自動生成的編號:
package model
import(
"gorm.io/gorm"
)
type Task struct {
gorm.Model // 將 ID 改為抓取資料庫內建
Item string `json:"item"`
Status bool `json:"status"`
}
type UpdateTask struct {
Item *string `json:"item"`
Status *bool `json:"status"`
}
📌 gorm.Model
預設新增四個欄位:
ID uint
:每一筆資料都會有一組自己的。CreatedAt time.Time
:資料建立時間。UpdatedAt time.Time
:資料被修改時間。DeletedAt gorm.DeletedAt
:刪除標記。DeletedAt gorm.DeletedAt
這個比較特別,它的意思是「 如果要刪除一筆資料,GORM 不會真的把資料從資料庫移除,而是把 DeletedAt
設成某個時間點 」。所以在我們查詢資料表時,GORM 就會自動忽略那些有被標記過的資料(DeletedAt != NULL
)。
👉 這樣子的做法是可以避免誤刪除資料,可以復原或是追蹤。
資料庫的連線要寫在 main.go
裡,與之前啟動 server、設置 router 路徑的位置一樣,不過資料庫連線需要放在最前面,連線之後,再建立資料表~(*一定是先連線 —> 再建表 )。
package main
import (
"app/apiHandler"
"app/middleware"
"app/model"
"github.com/gin-gonic/gin"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"fmt"
"log"
)
func main() {
// 連線 SQLite 資料庫
db, err := gorm.Open(sqlite.Open("tasks.db"), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect database")
}
// 自動建立資料表
err = db.AutoMigrate(&model.Task{})
if err != nil {
log.Fatal("failed to migrate")
}
fmt.Println("資料庫初始化完成!")
r := gin.Default()
// r.Use(middleware.ErrorHandler())
// r.GET("/tasks", apiHandler.GetTasks)
// r.POST("/tasks", apiHandler.AddTask)
// r.PATCH("/tasks/:id", apiHandler.UpdateTask)
// r.DELETE("/tasks/:id", apiHandler.DeleteTask)
r.Run(":8080")
}
但為了看出差別,我們可以先加入一筆資料,這樣等一下開資料庫就可以看到新增的資料~
所以在資料庫初始化之後與開啟 server 之前,新增一筆資料到資料庫中:
fmt.Println("資料庫初始化完成!")
// 新增一筆資料
task := model.Task{Item: "鐵人賽文章", Status: false}
db.Create(&task)
r := gin.Default()
接著,啟動專案之後,就會看到以下輸出:
而且根目錄會多一個 tasks.db
的檔案,看到有這個檔案,就表示成功了!
最後,我們要用 DB Browser for SQLite 來看一下剛剛的 tasks.db
裡面有沒有我們新增的測試資料~請大家先依照自己的設備下載對應的版本:https://sqlitebrowser.org/ ,完成下載之後,就可以開啟軟體!
接下來要匯入 tasks.db
資料庫:
點擊 Open Database → 找到 tasks.db
檔案 → Open
就會看到,tasks 資料庫成功開啟了!可以從資料庫中看到,我們剛剛在 model/task.go
檔案裡面設定的參數都有順利被建立。
再來,要來看一下剛才新增的測試資料有沒有成功輸入!
點擊 Browse Data → 在左上的 Table 選單,選擇 tasks 資料表
就會開看到內容了!!!是不是很有成就感~🎉🎉🎉
好的!以上就完成了資料庫的連線~明天我們會將 CRUD 的動作與資料庫做連動!