iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Cloud Native

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

【하나, 둘, ready, get set, go】Day 21 - 使用 GORM 對 SQL 資料庫進行讀取資料 (Read)

  • 分享至 

  • xImage
  •  

前情提要

昨天我們將新增的功能寫好了,今天要來繼續來將讀取的功能來實作出來~

實際操作

我們回到 repository/album.go,這邊我預想讀取的情況有兩種

  1. 可以透過 id 來存取到對應的資料 -> 單筆讀取
  2. 將資料庫內這張資料表的資料全部取出 -> 全部讀取

下面就來分別實作出來吧

單筆讀取

透過 GORM 提供的 Where 進行 id 欄位的 Query 查詢,並取第一筆資料進行回傳

// Read 透過 id 讀取指定單筆資料
func Read(id string) (database.Album, error) {
    var a database.Album
    result := database.DB.Where("id = ?", id).First(&a)
    return a, result.Error
}

全部讀取

透過 GORM 提供的 Find 撈取 Album struct (也就是資料庫內的 Album 資料表) 全部的資料,並回傳

// ReadAll 讀取全部資料
func ReadAll() ([]database.Album, error) {
    var albums []database.Album
    result := database.DB.Find(&albums)
    return albums, result.Error
}

實際呼叫

回到 main.go

package main

import (
    "demo/database"
    "demo/repository"
    "fmt"
    
    "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)
    }    
    
    // 讀取 Album 資料表內全部的資料
    albums, err := repository.ReadAll()
        
    // 判定錯誤是否為 gorm.ErrRecordNotFound 查無資料
    // 是的話,輸出 No record found,否則輸出報錯
    if errors.Is(err, gorm.ErrRecordNotFound) {
        fmt.Println("No record found")
    } else if err != nil {
        panic(err)
    }
    fmt.Println(albums)
    
    // 透過指定 id 從資料庫讀取指定資料
    album, err = repository.Read(album.ID)
    
    // 判定錯誤是否為 gorm.ErrRecordNotFound 查無資料
    // 是的話,輸出 No record found,否則輸出報錯
    if errors.Is(err, gorm.ErrRecordNotFound) {
        fmt.Println("No record found")
    } else if err != nil {
        panic(err)
    }
    fmt.Println(album)
}

執行後,就可以看到從 SQL 資料庫內讀取到的資料了~

https://ithelp.ithome.com.tw/upload/images/20230909/20140363wprK1Ix519.png

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

總結

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

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

明天見~


上一篇
【하나, 둘, ready, get set, go】Day 20 - 使用 GORM 對 SQL 資料庫進行新增資料 (Create)
下一篇
【하나, 둘, ready, get set, go】Day 22 - 使用 GORM 對 SQL 資料庫進行更新資料 (Update)
系列文
【하나, 둘, ready, get set, go】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言