GORM 指南

Golang 的出色 ORM 库,旨在对开发者友好。

概述

  • 全功能 ORM
  • 关联(一对一、一对多、多对一、多对多、多态、单表继承)
  • 钩子(创建/保存/更新/删除/查找之前/之后)
  • 使用 PreloadJoins 进行预加载
  • 事务、嵌套事务、保存点、回滚到已保存点
  • 上下文、预处理语句模式、DryRun 模式
  • 批量插入、分批查找、使用映射查找/创建、使用 SQL Expr 和上下文估值器进行 CRUD
  • SQL 构建器、Upsert、锁定、优化器/索引/注释提示、命名参数、子查询
  • 复合主键、索引、约束
  • 自动迁移
  • 记录器
  • 可扩展、灵活的插件 API:数据库解析器(多个数据库、读/写拆分)/Prometheus…
  • 每个功能都附带测试
  • 对开发者友好

安装

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

快速入门

package main

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

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)
}

白金赞助商

黄金赞助商

白金赞助商

黄金赞助商