Điều kiện cần:
- Đã làm việc với CSDL quan hệ
- Đã lập trình kết nối với Hệ quản trị CSDL (MySQL, MS SQL Server,...)
- Đã biết đến ORM
- Đã biến đến GORM trong Golang
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