入门指南
概述
登录后可跨设备保存划线和私人笔记登录
GORM 是一个面向 Golang 的优秀 ORM 库,致力于提供对开发者友好的使用体验。
概览
- 功能完整的 ORM
- 关联关系支持(Has One、Has Many、Belongs To、Many To Many、多态关联、单表继承)
- Hooks 钩子(Create / Save / Update / Delete / Find 操作前后执行)
- 支持通过
Preload、Joins进行预加载 - 事务、嵌套事务、保存点(Save Point)、回滚到指定保存点(RollbackTo)
- Context、预编译语句模式(Prepared Statement Mode)、DryRun 模式
- 批量插入、FindInBatches、使用 Map 进行 Find/Create、支持 SQL 表达式和 Context Valuer 的 CRUD 操作
- SQL Builder、Upsert、锁机制、优化器 / 索引 / 注释 Hint、命名参数、子查询
- 复合主键、索引、约束
- 自动数据库迁移(Auto Migrations)
- 日志系统(Logger)
- 泛型 API,支持类型安全的查询和数据库操作
- 可扩展、灵活的插件 API:
- Database Resolver(多数据库、读写分离)
- Prometheus
- 等
- 所有功能均配有测试
- 对开发者友好
安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite快速开始
泛型 API(>= v1.30.0)
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()
// 自动迁移数据库表
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)
// 更新单个字段
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
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")
}
// 自动迁移数据库表
db.AutoMigrate(&Product{})
// 创建数据
db.Create(&Product{Code: "D42", Price: 100})
// 查询数据
var product Product
db.First(&product, 1)
db.First(&product, "code = ?", "D42")
// 更新单个字段
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)
}评论
登录后参与评论
正在加载评论…
InfoSphere