GORM是使用Golang开发的出色ORM库

GORM

Golang 的出色 ORM 库旨在方便开发人员。

概述

  • 功能齐全的 ORM
  • 关联(包含一个、包含多个、属于、多对多、多态、单表继承)
  • 钩子(创建/保存/更新/删除/查找之前/之后)
  • 使用 PreloadJoins 进行预加载
  • 事务、嵌套事务、保存点、回滚到保存点
  • 上下文、Prepared Statement 模式、DryRun 模式
  • 批量插入、批量查找、查找到 Map
  • SQL 生成器、更新插入、锁定、优化器/索引/注释提示、NamedArg、使用 SQL Expr 进行搜索/更新/创建
  • 复合主键
  • 自动迁移
  • 日志记录器
  • 可扩展、灵活的插件 API:数据库解析器(支持多个数据库、读写分离)/ Prometheus……
  • 每个功能都经过测试
  • 开发者友好

安装

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

快速开始

泛型 API (>= v1.30.0)

golang 复制代码
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("failed to connect database")
  }

  ctx := context.Background()

  // Migrate the schema
  db.AutoMigrate(&Product{})

  // Create
  err = gorm.G[Product](db).Create(ctx, &Product{Code: "D42", Price: 100})

  // Read
  product, err := gorm.G[Product](db).Where("id = ?", 1).First(ctx) // find product with integer primary key
  products, err := gorm.G[Product](db).Where("code = ?", "D42").Find(ctx) // find product with code D42
 
  // Update - update product's price to 200
  err = gorm.G[Product](db).Where("id = ?", product.ID).Update(ctx, "Price", 200)
  // Update - update multiple fields
  err = gorm.G[Product](db).Where("id = ?", product.ID).Updates(ctx, map[string]interface{}{"Price": 200, "Code": "F42"})

  // Delete - delete product
  err = gorm.G[Product](db).Where("id = ?", product.ID).Delete(ctx)
}

传统 API

golang 复制代码
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("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)
}

许可证

© Jinzhu,2013~time.Now

根据 MIT 许可证 发布

关于项目

对开发人员友好的,使用Golang 开发的优秀 ORM 库。
MIT
Golang
38,961
4110
493
2013-10-25
2025-09-20

增长趋势 - stars