笔记:GORM 设计原理

71 阅读1分钟

GORM 是一个 Go 语言的 ORM 框架,它提供了方便的 API,使得开发者能够更加方便地操作数据库。以下是 GORM 的设计原理以及相应的代码示例。

  1. 结构体映射

GORM 通过结构体映射的方式来操作数据库。开发者只需要定义一个结构体,并在结构体上添加 GORM 的注解,就可以将结构体映射到对应的数据库表中。

type User struct {
    ID        uint   `gorm:"primary_key"`
    Name      string `gorm:"column:name"`
    Age       int    `gorm:"column:age"`
    CreatedAt time.Time
    UpdatedAt time.Time
}
  1. 数据库连接

GORM 支持多种数据库的连接,包括 MySQL、PostgreSQL、SQLite 等。开发者只需要在代码中指定对应的数据库类型和连接信息,就可以连接到数据库。

import "gorm.io/driver/mysql"

dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
  1. 数据库操作

GORM 提供了丰富的 API,使得开发者可以方便地进行数据库操作,包括增删改查、事务、分页等。以下是一些常用的 API 示例:

// 创建记录
user := User{Name: "张三", Age: 18}
db.Create(&user)

// 查询记录
var result User
db.First(&result, "name = ?", "张三")

// 更新记录
db.Model(&result).Update("age", 20)

// 删除记录
db.Delete(&result)

// 事务
tx := db.Begin()
defer func() {
    if r := recover(); r != nil {
        tx.Rollback()
    }
}()
tx.Create(&User{Name: "李四", Age: 20})
tx.Create(&User{Name: "王五", Age: 22})
tx.Commit()

// 分页
var users []User
db.Offset(10).Limit(20).Find(&users)
  1. 关联查询

GORM 支持多种关联查询方式,包括一对一、一对多、多对多等。开发者只需要在结构体上添加对应的注解,就可以进行关联查询。

type Product struct {
    ID     uint
    Name   string
    UserID uint
    User   User `gorm:"foreignKey:UserID"`
}

var product Product
db.Preload("User").First(&product, 1)