gorm的使用 - Wed, Sep 8, 2021
gorm的使用
1. 概述
gorm是开源库,将sql与go语言进行映射的Object Relational Mapping.
2. sql字段属性
// User 用户信息
type User struct {
// Id 内部唯一ID
Id string `gorm:"primaryKey;not null;unique" json:"id"`
// ParentId 父节点ID
ParentId string `json:"parent_id"`
// Name 用户名称唯一
Name string `gorm:"not null;unique" json:"name"`
// Alias 用户别名(昵称)
Alias string `json:"alias"`
// Role 角色
Role pb.Role `gorm:"not null" json:"role"`
CreatedAt int64 `gorm:"autoCreateTime:nano" json:"created_at"` // 创建时间
UpdatedAt int64 `gorm:"autoUpdateTime:nano" json:"updated_at"` // 更新时间
// Metadata 用户标签
Metadata string `json:"metadata"`
}
表名
// TableName redefine gorm table name
func (User) TableName() string {
return cUser
}
3. CRUD
3.1 Create
有取第一个值,没有则创建
err = db.client.WithContext(ctx).Where(User{Name: "root"}).FirstOrCreate(tmp).Error
if err != nil {
return
}
有事务的创建
tx := db.client.WithContext(ctx).Begin()
err = tx.Create(tmp).Error
if err != nil {
tx.Rollback()
return
}
err = tx.Create(&Auth{Username: tmp.Name, Password: string(pwd)}).Error
if err != nil {
tx.Rollback()
return
}
err = tx.Commit().Error
if err != nil {
return
}
3.2 Read
取第一个
err := db.client.WithContext(ctx).Where("name = ?", username).First(tmp).Error
if err != nil {
return
}
取列表
tmps := make([]*User, 0)
err = db.client.WithContext(ctx).Where(q).Order(strings.Join(orders, ",")).Limit(int(limit)).Offset(int(skip)).Find(&tmps).Error
if err != nil {
return
}
3.3 Update
全更新
err = db.client.WithContext(ctx).Save(tmp).Error
if err != nil {
return
}
3.4 Delete
通过ID删除
tmp := &User{
Id: ID,
}
err = db.client.WithContext(ctx).Delete(tmp).Error
if err != nil {
return
}