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 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
GORM基本用法
CRUD
1. 打开(Open)
gorm.open()方法打开一个数据库并返回数据库对象与error信息,第一个参数为driver,driver的Open方法需要传入数据库的DSN
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
func main(){
db,err=gorm.open(mysql.Open("user:password\@tcp(127.0.0.1:3306)/hello"),\&gorm.Config{})
}
2. Create
创建单条记录:
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
result := db.Create(&user) // pass pointer of data to Create
user.ID // returns inserted data's primary key
result.Error // returns error
result.RowsAffected // returns inserted records count
创建多条记录:
users := []*User{ User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}, User{Name: "Jackson", Age: 19, Birthday: time.Now()}, }
result := db.Create(users) // pass a slice to insert multiple row
result.Error // returns error
result.RowsAffected // returns inserted records count