GORM với các thao tác CRUD

Điều kiện cần:

Chuẩn bị CSDL trong MySQL

Trước tiên cần cài đặt CSDL MySQL và có tài khoản root và mật khẩu để đăng nhập vào trong MySQL.

Tải tệp OrderDB.sql với liên kết tại đây.

Chạy file OrderDB.sql bằng lệnh sau:

mysql -u root -p < ./OrderDB.sql

Hoặc mở tệp OrderDB.sql bằng MySQLWorkbench với tài khoản root rồi chạy toàn bộ file này.

Tải các thư viện cần thiết

  • Thư viện GORM
    go get -u gorm.io/gorm​
  • Trình điều khiển MySQL cho GORM
    go get -u gorm.io/driver/mysql​

Tạo cấu trúc dự án

Chúng ta bắt đầu bằng cách đơn giản tạo một thư mục cho dự án của mình và một tệp có tên "main.go" bên trong đó. Sử dụng bằng lệnh sau:

mkdir gorm-mysql
cd gorm-mysql 
touch main.go

Tạo cấu trúc dự án với các bước sau:

  • Tạo module cho dự án:
    go mod init gorm-mysql
  • Tạo gói (package) models (chứa các kiểu cấu trúc ánh xạ ORM) cho dự án và tệp Item.go:
    mkdir models
    cd models 
    touch Item.go

Thực hiện mã lệnh

Item.go

package models

//Item type
type Item struct {
	ItemID          uint    `json:"itemId" gorm:"column:item_id;primaryKey;autoIncrement"`
	ItemName        string  `json:"itemName" gorm:"column:item_name"`
	UnitPrice       float64 `json:"unitPrice" gorm:"column:unit_price"`
	Amount          int32   `json:"amount" gorm:"column:amount"`
	ItemStatus      int16   `json:"status" gorm:"column:item_status"`
	ItemDescription string  `json:"description" gorm:"column:item_description"`
	// CreateAt        time.Time `json:"createAt" gorm:"autoCreateTime"`
	// UpdateAt        time.Time `json:"updateAt" gorm:"autoUpdateTime"`
}

main.go

package main

import (
	"fmt"
	"gorm-mysql/models"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	dsn := "sinhnx:sinhnx.dev@tcp(127.0.0.1:3306)/OrderDB?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	fmt.Println("Connect Successfull.")
	item := models.Item{ItemName: "ITEM 1101", UnitPrice: 12.5, Amount: 10, ItemStatus: 1, ItemDescription: "description..."}
	result := db.Create(&item)
	if result.RowsAffected > 0 {
		fmt.Printf("New item id: %d\n", item.ItemID)
	}

	item.ItemName = "Item 198X"
	result = db.Save(&item)
	if result.RowsAffected > 0 {
		fmt.Printf("update item id: %d, item name: %s\n", item.ItemID, item.ItemName)
	}

	result = db.First(&item, item.ItemID)
	if result.RowsAffected > 0 {
		fmt.Println(item)
	}

	result = db.Delete(&models.Item{}, item.ItemID)
	if result.RowsAffected > 0 {
		fmt.Printf("deleted item id: %d\n", item.ItemID)
	}
}

Biên dịch và chạy dự án

Gõ lệnh sau để biên dịch và chạy dự án

go build
./gorm-mysql

Kết quả hiển thị:

Connect Successfull.
New item id: 54
update item id: 54, item name: Item 198X
{54 Item 198X 12.5 10 1 description...}
deleted item id: 54