Z
ZHANK
Web 与工程化

GORM ORM 入门

GORM 模型定义、AutoMigrate、CRUD、关联查询 Preload

GORM ORM 入门

GORM 是 Go 最流行的 ORM——模型即表结构,链式调用构建查询。

学完本章你将: 掌握 GORM 模型定义、AutoMigrate、CRUD、关联查询。


模型定义

go
import (
    "gorm.io/gorm"
    "gorm.io/driver/sqlite"
)

type User struct {
    gorm.Model           // 内嵌 ID/CreatedAt/UpdatedAt/DeletedAt
    Name  string
    Email string `gorm:"uniqueIndex"`
    Age   int
    Posts []Post         // 一对多
}

type Post struct {
    gorm.Model
    Title   string
    Content string
    UserID  uint
}

func main() {
    db, _ := gorm.Open(sqlite.Open("app.db"), &gorm.Config{})
    db.AutoMigrate(&User{}, &Post{})  // 自动建表
}

CRUD

go
// 创建
db.Create(&User{Name: "小明", Email: "xm@test.com", Age: 25})

// 查询
var user User
db.First(&user, 1)                  // 按主键
db.Where("name = ?", "小明").First(&user)
db.Where("age > ?", 18).Find(&users)

// 更新
db.Model(&user).Update("Age", 26)
db.Model(&user).Updates(User{Age: 26, Name: "小明改"})

// 删除(软删除——设置 DeletedAt)
db.Delete(&user, 1)

关联查询

go
// 预加载
var user User
db.Preload("Posts").First(&user, 1)
for _, post := range user.Posts {
    fmt.Println(post.Title)
}

// 关联创建
db.Model(&user).Association("Posts").Append(&Post{Title: "新文章"})