官方文档笔记
字段标签
声明model时,tag是可选的,GORM支持以下tag: tag名大小写不敏感,但建议使用camelCase风格
CRUD接口
创建
创建记录
user := User{Name: "Jinzhu", Age:18, Birthday: time.Now()}
result := db.Create(&user)
user.ID // 返回插入数据的主键
result.Error // 返回 error
result.RowsAffected // 返回插入记录的条数
还可以使用Create()
创建多项记录
users := []*User{
User{Name: "Jinzhu", Age: 18, Birthday: time.Now()},
User{Name: "Jackson", Age: 19, Birthday: time.Now()},
}
result := db.Create(users) // 传递切片以插入多行数据
result.Error // 返回 error
result.RowsAffected // 返回插入记录的条数
NOTE:无法传递结构体,应该传入数据的指针
用指定的字段创建记录
创建记录并指定字段赋值
db.Select("Name", "Age", "CreatedAt").Create(&user)
// INSERT INTO `users` (`name`,`age`,`created_at`) VALUES ("jinzhu", 18, "2020-07-04 11:05:21.775")
创建记录并忽略传递给Omit
的字段值
db.Omit("Name", "Age", "CreatedAt").Create(&user)
// INSERT INTO `users` (`birthday`,`updated_at`) VALUES ("2020-01-01 00:00:00.000", "2020-07-04 11:05:21.775")
批量插入
var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}}
db.Create(&users)
for _, user := range users {
user.ID // 1,2,3
}
创建钩子
GORM允许我们允许创建4中钩子:BeforeSave, BeforeCreate, AfterSave, AfterCreate
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
u.UUID = uuid.New()
if u.Role == "admin" {
return errors.New("invalid role")
}
return
}
根据Map创建
GORM支持通过map[string]interface{}
和map[string]interface{}{}