GORM 简介
一个非常好用的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
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 APl: Database Resolver (多数据库,读写分离) 、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.Configf{})
if err != nil {
panic("failed to connect database")
}
//迁移 schema
db.AutoMigrate(&Product{})
//Create
db.Create(&Product{Code:"D42",Price: 101})
//Read
var product Product
db.First(&product,1) // 根据整型主键查找
db.First(&product,"code = ?","D42") // 查找 code 字段值为 D42 的记录Update - 将 product 的 price 更新为 200
db.Model(&product).Update("price",200)
//Update - 更新多个字段
db,Model(&product).Updates(Product{Price: 28,Code:"F42"]) // 仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"price": 200,"Code": "F42"})
//Delete - 删除 product
db .Delete(&product,1)
}