gorm的使用

  1. 1. 概述
  2. 2. sql字段属性
  3. 3. CRUD
    1. 3.1 Create
    2. 3.2 Read
    3. 3.3 Update
    4. 3.4 Delete

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
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation