Implement Gorm และ MySQL ใน Go
ในส่วนของ Gorm นั้นคือ Library ORM (Object-relational Mapping) ของ Go เอาไว้ทำ CRUD (Create, Read, Update, Delete) เช่น เก็บข้อมูลลง server หรือ ดึงข้อมูลมาใช้ คล้ายกับ Prisma โดยที่ไม่ต้องเขียน SQL เอง ซึ่ง gorm รองรับทั้ง MySQL, PostgreSQL, SQLite, SQL Server
เราสามารถใช้ gorm ได้ ผ่านการ import
import (
"gorm.io/gorm"
"gorm.io/driver/typedatabaseของคุณ"
)
ตัวอย่างการใช้ Gorm ใน Go
package main
import (// การ import gorm เข้ามาใช้
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {// สร้าง model schema
gorm.Model
Code string
Price uint
}
func main() {// func gorm
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// Migrate the schema
db.AutoMigrate(&Product{})
// Create
db.Create(&Product{Code: "D42", Price: 100})
// Read
var product Product
db.First(&product, 1) // find product with integer primary key
db.First(&product, "code = ?", "D42") // find product with code D42
// Update - update product's price to 200
db.Model(&product).Update("Price", 200)
// Update - update multiple fields
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // non-zero fields
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// Delete - delete product
db.Delete(&product, 1)
}
How to connect MySQL
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
เช่น การเข้า workshop ของ GDSC
- Host: gdsc-int.sit.kmutt.ac.th (ต้องต่อผ่าน vpn มอนะ)
- Port: 13306
- Username: workshop01
- Password: DBpAhVUgCMDSLwwP
- dbname: workshop01
dsn := "workshop01:DBpAhVUgCMDSLwwP@tcp(gdsc-int.sit.kmutt.ac.th:13306)/demo_store?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
เมื่อเข้าแล้ว ลอง test connection โดยการ
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "workshop01:DBpAhVUgCMDSLwwP@tcp(gdsc-int.sit.kmutt.ac.th:13306)/workshop01?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("fail connection")
} else {
fmt.Println("Connecting successful")
fmt.Println(db) //เป็นการเรียกใช้ db เผพื่อไม่ให้แดงเฉยๆ
}
}
ถ้าสำเร็จก็จะขึ้นแบบนี้
Basic Gorm
ขั้นตอนแรกคือเราต้อง สร้าง struct หรือ model schema เพื่อเป็น object ที่ไว้รองรับข้อมูลจาก database server
type Products struct {
Id uint
Name string
Price int
On_sale bool
}
func main {
....
var product Products
....
}
จากนั้นเราจะทำการหยิบเอา table แรกของ database ใส่ใน struct ของเรา ผ่านคำสั่ง First() ของ gorm
var product Products
db.First(&product)
คำสั่งพื้นฐาน ใน Gorm
เมื่อเราสามารถ connect กับ database สำเร็จ เราจะมาเรียนรู้คำสั่งพื้นฐานของ Gorm กันว่า Gorm อะไรได้บ้าง
Create
คำสั่ง Create เป็นการ add table ลงใน database server
เราสามารถ create table ได้หลายแบบเช่น
การ Create แบบใส่ ข้อมูล struct แต่ละตัว
db.Create(&Products{
Id: 2,
Name: "Iphone 13",
Price: 29900,
On_sale: true,
})
การ Create แบบใส่สร้างตัวแปร struct ขึ้นมาก่อนละค่อยนำไปสร้างเป็น table
iphone_14_pro := Products{
Id: 3,
Name: "Iphone 14 Pro",
Price: 41900,
On_sale: true,
}
db.Create(&iphone_14_pro)
Update
คือการ update ค่าใน table นั้นๆ
Example
iphone_14_pro.Name = "Iphone 14 Pro max"
iphone_14_pro.Price = 44900
db.Save(&iphone_14_pro)
Delete
ลบ table ใน database server
db.Delete(product)
Delete Where
การลบ table ใน database server โดยมีเงื่อนไข
db.Where("name = ?", "Iphone 13").Delete(&product)
ข้อควรระวัง
เมื่อลบ ค่าที่ถูกลบจะต้องมีคีย์หลัก มิฉะนั้นจะทำให้เกิด Batch Delete
Batch Delete
คือ ค่าที่ระบุไม่มีค่าหลัก GORM จะทำการลบแบบกลุ่ม และจะลบ table ที่ตรงกันทั้งหมด
db.Where("name LIKE ?", "%Iphone%").Delete(&Products{})