GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

一个致力于对开发者友好的优秀 Golang ORM 库。 特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Cont

访问网站
我的收藏175 次访问更新于 a month ago反馈
GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. screenshot

详细介绍

GORM 指南

简介

GORM 是一个致力于对开发者友好的优秀 Golang ORM 库,旨在为 Go 语言开发者提供全功能的对象关系映射能力。其官方指南站点提供了从入门到高级主题的完整中文文档。

主要功能

GORM 具备以下主要特性:

  • 全功能 ORM:支持关联(Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • 钩子方法:在 Create,Save,Update,Delete,Find 中提供钩子
  • 预加载:支持 Preload、Joins 的预加载
  • 事务支持:事务,嵌套事务,Save Point,Rollback To Saved Point
  • 运行模式:Context、预编译模式、DryRun 模式
  • 批量与表达式操作:批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建:SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 表结构管理:复合主键,索引,约束,Auto Migration
  • 自定义与日志:自定义 Logger
  • 泛型 API:用于类型安全查询和操作的泛型 API(>= v1.30.0)
  • 可扩展插件:可扩展且灵活的插件 API,如数据库解析器(支持多数据库、读写分离)或 Prometheus 集成等
  • 测试完备:每个特性都经过了测试的重重考验

安装

通过以下命令安装 GORM 及对应数据库驱动(示例为 SQLite):

bash 复制代码
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

快速入门

GORM 支持泛型 API 与传统 API 两种使用方式。

泛型 API(>= v1.30.0)

go 复制代码
package main

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

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  if err != nil {
    panic("连接数据库失败")
  }
  ctx := context.Background()
  // 自动建表
  db.AutoMigrate(&Product{})
  // 创建
  err = gorm.G[Product](db).Create(ctx, &Product{Code: "D42", Price: 100})
  // 查询
  product, err := gorm.G[Product](db).Where("id = ?", 1).First(ctx)
  products, err := gorm.G[Product](db).Where("code = ?", "D42").Find(ctx)
  // 更新 - 将产品价格更新为 200
  err = gorm.G[Product](db).Where("id = ?", product.ID).Update(ctx, "Price", 200)
  // 更新 - 更新多个字段
  err = gorm.G[Product](db).Where("id = ?", product.ID).Updates(ctx, Product{Code: "D42", Price: 100})
  // 删除 - 删除产品
  err = gorm.G[Product](db).Where("id = ?", product.ID).Delete(ctx)
}

传统 API

go 复制代码
package main

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

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  if err != nil {
    panic("连接数据库失败")
  }
  // 自动建表
  db.AutoMigrate(&Product{})
  // 创建
  db.Create(&Product{Code: "D42", Price: 100})
  // 查询
  var product Product
  db.First(&product, 1)
  db.First(&product, "code = ?", "D42")
  // 更新 - 将产品价格更新为 200
  db.Model(&product).Update("Price", 200)
  // 更新 - 更新多个字段
  db.Model(&product).Updates(Product{Price: 200, Code: "F42"})
  db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
  // 删除 - 删除产品
  db.Delete(&product, 1)
}

适用场景

GORM 适用于使用 Go 语言进行后端开发、需要便捷操作关系型数据库的项目。无论是快速搭建原型,还是构建具备复杂关联、事务和多数据库支持的规模化服务,均可借助其全功能 ORM 能力与插件体系提升开发效率。其详尽的指南文档覆盖了从声明模型、连接数据库到编写插件、性能调优等各个阶段,适合个人开发者及团队参考使用。