Go语言对象关系映射ORM

目录gORMxormgORM安装GORM首先,确保你的环境中已经安装了Go和一个支持的数据库驱动。然后通过以下命令安装gorm:goget-ugorm.io/gorm基础概念Model:数据库中的表。Record:表中的行。Field:表中的列。Relat

目录


gORM

安装GORM

首先,确保你的环境中已经安装了Go和一个支持的数据库驱动。然后通过以下命令安装gorm:

go get -u gorm.io/gorm

基础概念

  • Model: 数据库中的表。
  • Record: 表中的行。
  • Field: 表中的列。
  • Relation: 模型之间的关联。

快速入门

连接数据库

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

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }
}

创建模型 定义一个简单的用户模型:

type User struct {
    gorm.Model
    Name  string
    Email string
}

自动迁移

db.AutoMigrate(&User{})

创建记录

db.Create(&User{Name: "张三", Email: "zhangsan@example.com"})

查询记录

var user User
db.First(&user, 1) // 根据主键查询

关联

  • 一对一 (One-to-One)
  • 一对多 (One-to-Many)
  • 多对多 (Many-to-Many)

示例代码

type Profile struct {
    gorm.Model
    UserID uint
    User   User
}

db.Model(&Profile{}).Association("User").Set(&User{})

批量操作

users := []User{{Name: "李四"}, {Name: "王五"}}
db.Create(&users)

事务处理

tx := db.Begin()
tx.Create(&user)
if tx.Error != nil {
    tx.Rollback()
} else {
    tx.Commit()
}

一对一 (One-to-One)

例如,用户和其个人资料的关系:

type User struct {
    gorm.Model
    Name  string
    Email string
    ProfileID uint
    Profile Profile `gorm:"foreignKey:ProfileID"`
}

type Profile struct {
    gorm.Model
    Address string
    User    User `gorm:"foreignKey:ID"`
}

创建和读取关联数据


// 创建用户及其个人资料
profile := Profile{Address: "上海市"}
db.Create(&profile)

user := User{Name: "张三", Email: "zhangsan@example.com", ProfileID: profile.ID}
db.Create(&user)

// 读取用户及其个人资料
var user User
db.Preload("Profile").First(&user, 1)
fmt.Println...

剩余80%的内容订阅专栏后可查看

  • 学分: 0
  • 分类: Go
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论