Go Programming – GORM
GORM (Go Object-Relational Mapping) เป็นไลบรารี ORM ที่ทรงพลังและใช้งานง่ายสำหรับภาษา Go ซึ่งช่วยให้นักพัฒนาสามารถทำงานกับฐานข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น GORM ช่วยลดความซับซ้อนในการเขียนคำสั่ง SQL โดยตรง ทำให้โค้ดอ่านง่ายขึ้นและบำรุงรักษาง่ายขึ้น บทความนี้จะแนะนำคุณตลอดกระบวนการใช้ GORM ตั้งแต่การติดตั้งเบื้องต้นไปจนถึงการใช้งานฟังก์ชันขั้นสูง เช่น การสร้างความสัมพันธ์ระหว่างตาราง (Association) และการดึงข้อมูลล่วงหน้า (Preloading) ด้วย GORM คุณจะสามารถจัดการฐานข้อมูลได้อย่างมีประสิทธิภาพและรวดเร็ว
การติดตั้ง GORM
การเริ่มต้นใช้งาน GORM นั้นง่ายมาก คุณสามารถติดตั้ง GORM และไดรเวอร์ฐานข้อมูลที่คุณต้องการได้โดยใช้คำสั่ง `go get`
การ Get Package GORM
เริ่มต้นด้วยการติดตั้ง GORM โดยใช้คำสั่ง `go get gorm.io/gorm` ใน Terminal ของคุณ
การ Copy Driver
หลังจากติดตั้ง GORM แล้ว คุณจะต้องติดตั้งไดรเวอร์ฐานข้อมูลที่คุณต้องการใช้งาน เช่น MySQL, PostgreSQL, SQLite หรืออื่น ๆ ในตัวอย่างนี้ เราจะใช้ MySQL
การติดตั้ง Driver MySQL
ติดตั้งไดรเวอร์ MySQL โดยใช้คำสั่ง `go get gorm.io/driver/mysql`
การเชื่อมต่อฐานข้อมูล
หลังจากติดตั้ง GORM และไดรเวอร์แล้ว ขั้นตอนต่อไปคือการเชื่อมต่อกับฐานข้อมูลของคุณ
การใช้คำสั่ง Open
GORM ใช้คำสั่ง `Open` เพื่อเชื่อมต่อกับฐานข้อมูล คุณจะต้องระบุไดรเวอร์ฐานข้อมูลและข้อมูลการเชื่อมต่อ เช่น ชื่อผู้ใช้ รหัสผ่าน โฮสต์ และชื่อฐานข้อมูล
การใช้ Driver SQL
ไดรเวอร์ SQL จะช่วยให้คุณสามารถเชื่อมต่อกับฐานข้อมูลได้
การสร้าง Database
ก่อนที่คุณจะเชื่อมต่อกับฐานข้อมูล คุณจะต้องมีฐานข้อมูลที่คุณจะใช้ คุณสามารถสร้างฐานข้อมูลได้โดยใช้เครื่องมือจัดการฐานข้อมูล เช่น phpMyAdmin หรือคำสั่ง SQL
การติดตั้ง Extension
คุณอาจต้องติดตั้งส่วนขยายเพิ่มเติมสำหรับฐานข้อมูลของคุณ เช่น ส่วนขยายสำหรับจัดการเวลา (timestamp) ใน MySQL
การ Connect Database
หลังจากติดตั้งไดรเวอร์และมีฐานข้อมูลแล้ว คุณสามารถใช้คำสั่ง `Open` เพื่อเชื่อมต่อกับฐานข้อมูลได้
“`go
import (
“gorm.io/driver/mysql”
“gorm.io/gorm”
)
func main() {
dsn := “user:password@tcp(localhost:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local”
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(“failed to connect database”)
}
// …
}
“`
การสร้าง Model และ Migrate
GORM ใช้ Model เพื่อแมปกับตารางในฐานข้อมูล Model คือ struct ที่กำหนดโครงสร้างของข้อมูลที่คุณต้องการจัดเก็บในฐานข้อมูล
การสร้าง Table
คุณสามารถสร้างตารางในฐานข้อมูลโดยใช้ Model ของ GORM
การใช้ Migrate
GORM มีฟังก์ชัน `Migrate` ที่ช่วยให้คุณสร้างและจัดการตารางในฐานข้อมูลโดยอัตโนมัติ
การใช้ Auto Migrate
ฟังก์ชัน `AutoMigrate` จะสร้างตารางให้คุณโดยอัตโนมัติตาม Model ที่คุณกำหนด
“`go
type Gender struct {
ID uint `gorm:”primaryKey”`
Name string
}
func main() {
// … (การเชื่อมต่อฐานข้อมูล)
db.AutoMigrate(&Gender{})
}
“`
การใช้ Create Table
คุณสามารถใช้คำสั่ง `Create Table` เพื่อสร้างตาราง
การใช้ Convention
GORM ใช้ Convention เพื่อลดการ Config เช่น ชื่อตารางจะถูกตั้งค่าตามชื่อ struct ในรูปแบบ pluralized snake_case
การใช้ Snake Case
GORM จะแปลงชื่อ field ใน struct เป็น snake_case ในตารางฐานข้อมูล
การใช้ SQL Logger
GORM มี SQL Logger ที่ช่วยให้คุณดูคำสั่ง SQL ที่ GORM สร้างขึ้นได้ ซึ่งเป็นประโยชน์สำหรับการแก้ไขปัญหาและทำความเข้าใจการทำงานของ GORM
การใช้ Interface
GORM ใช้ Interface เพื่อให้คุณสามารถขยายและปรับแต่งการทำงานของ GORM ได้
การ Config
คุณสามารถ Config GORM เพื่อปรับแต่งการทำงานของ GORM เช่น การตั้งค่า Logger, การตั้งค่าการเชื่อมต่อ และอื่น ๆ
การใช้ Column
คุณสามารถใช้ tag `gorm:”column:column_name”` เพื่อกำหนดชื่อคอลัมน์ในตาราง
การใช้ Primary Key
คุณสามารถใช้ tag `gorm:”primaryKey”` เพื่อกำหนดคอลัมน์เป็น primary key
การใช้ Index
คุณสามารถใช้ tag `gorm:”index”` เพื่อสร้าง index สำหรับคอลัมน์
การใช้ Comment
คุณสามารถใช้ tag `gorm:”comment:comment”` เพื่อเพิ่ม comment ให้กับคอลัมน์
การใช้ Table Name
คุณสามารถใช้ tag `gorm:”table:table_name”` เพื่อกำหนดชื่อตาราง
การใช้ Model
Model คือ struct ที่แสดงถึงตารางในฐานข้อมูล
การ CRUD (Create, Read, Update, Delete)
GORM มีฟังก์ชัน CRUD (Create, Read, Update, Delete) ที่ช่วยให้คุณสามารถจัดการข้อมูลในฐานข้อมูลได้อย่างง่ายดาย
การใช้ Create
ใช้ `Create` เพื่อสร้าง record ใหม่ในฐานข้อมูล
“`go
func main() {
// … (การเชื่อมต่อฐานข้อมูล)
db.Create(&Gender{Name: “Male”})
}
“`
การใช้ First
ใช้ `First` เพื่อดึง record แรกที่ตรงกับเงื่อนไข
“`go
var gender Gender
db.First(&gender, 1) // find product with integer primary key
“`
การใช้ Take
ใช้ `Take` เพื่อดึง record แรกโดยไม่สนใจเงื่อนไข
“`go
var gender Gender
db.Take(&gender)
“`
การใช้ Last
ใช้ `Last` เพื่อดึง record สุดท้ายที่ตรงกับเงื่อนไข
“`go
var gender Gender
db.Last(&gender)
“`
การใช้ File
ไม่มีฟังก์ชัน File ใน GORM
การใช้ Where
ใช้ `Where` เพื่อกรองข้อมูลตามเงื่อนไข
“`go
var genders []Gender
db.Where(“name = ?”, “Male”).Find(&genders)
“`
การใช้ Order
ใช้ `Order` เพื่อเรียงลำดับข้อมูล
“`go
var genders []Gender
db.Order(“name desc”).Find(&genders)
“`
การใช้ Limit
ใช้ `Limit` เพื่อจำกัดจำนวน record ที่ดึง
“`go
var genders []Gender
db.Limit(10).Find(&genders)
“`
การใช้ Get Gender
ใช้ฟังก์ชันต่างๆ เช่น `First`, `Find` เพื่อดึงข้อมูล Gender
การใช้ Get Gender By ID
ใช้ `First` และระบุ ID เพื่อดึงข้อมูล Gender ตาม ID
“`go
var gender Gender
db.First(&gender, 1)
“`
การใช้ Get Gender By Name
ใช้ `Where` เพื่อกรองข้อมูลตามชื่อ Gender
“`go
var genders []Gender
db.Where(“name = ?”, “Male”).Find(&genders)
“`
การใช้ Update
ใช้ `Update` เพื่ออัปเดตข้อมูล
“`go
db.Model(&gender).Update(“name”, “Female”)
“`
การใช้ Update Single Column
ใช้ `Update` เพื่ออัปเดตคอลัมน์เดียว
“`go
db.Model(&gender).Update(“name”, “Female”)
“`
การใช้ Update Multiple Columns
ใช้ `Update` เพื่ออัปเดตหลายคอลัมน์พร้อมกัน
“`go
db.Model(&gender).Updates(Gender{Name: “Female”})
“`
การใช้ Delete
ใช้ `Delete` เพื่อลบข้อมูล
“`go
db.Delete(&gender)
“`
การใช้ Soft Delete
GORM รองรับ Soft Delete ซึ่งจะตั้งค่าคอลัมน์ `deleted_at` แทนการลบข้อมูลจริง
“`go
type Gender struct {
ID uint `gorm:”primaryKey”`
Name string
gorm.DeletedAt
}
“`
การใช้ Permanent Delete
คุณสามารถลบข้อมูลอย่างถาวรได้โดยใช้ `Unscoped().Delete()`
“`go
db.Unscoped().Delete(&gender)
“`
Association และ Preloading
GORM รองรับ Association ซึ่งช่วยให้คุณสามารถสร้างความสัมพันธ์ระหว่างตารางได้
การสร้าง Customer
ตัวอย่างการสร้าง Model Customer และความสัมพันธ์กับ Gender
“`go
type Customer struct {
ID uint `gorm:”primaryKey”`
Name string
GenderID uint
Gender Gender
}
“`
การใช้ Association
คุณสามารถใช้ Association เพื่อเชื่อมโยงข้อมูลจากตารางที่เกี่ยวข้อง
“`go
var customer Customer
db.Preload(“Gender”).First(&customer)
“`
การใช้ Preloading
Preloading ช่วยให้คุณดึงข้อมูลที่เกี่ยวข้อง (เช่น Gender) พร้อมกันกับข้อมูลหลัก (เช่น Customer) ซึ่งช่วยลดจำนวน query ที่ต้องเรียกใช้
💬 ปรึกษาการเงินฟรีกับผู้เชี่ยวชาญ คลิกเพื่อแอดไลน์
หรือสแกน QR เพื่อแอด

Leave a Reply