go:gorm包

GORM中文文档http://gorm.book.jasperxu.com/


  • 操作一张表,一般对应一个model包下的struct,总结几条规则:
type Animal struct {
    AnimalId    int64     `gorm:"primary_key"` // 设置AnimalId为主键
    AgeTime     int64     // 自动对应表中age_time字段
    Birthday    time.Time `gorm:"column:day_of_the_beast"` // 绑定字段名为`day_of_the_beast`
}
  • gorm有几个字段非常有意思:
CreateAt
UpdateAt
DeleteAt // 软删除时经常会用到

这几个字段分别在对应操作下会自动更新


// 常用查询
db.Table("table_name").Where("id = ?",Id).Find(&dbItem)
// 取反查询
db.Table("table_name").Not("id = ?",Id).Find(&dbItem)
// 取数量
db.Table("table_name").Where("id=?",id).Count(&count)
// 取一列
db.Table().Where().Pluck("name",&name)
// 取多列
db.Table().Select("name,age").Where().Scan(&name,&age)

// 所有字段全部更新
db.Table().where().Save()
// 更新部分属性
db.Table().where().Update(map[string]interface{}{"name":"ShellDawn"})
// 更新时只选择某些字段更新
db.Table().Select().Update()
// 更新时忽略某些字段
db.Table().Omit().Update()

有 一 点 很 有 意 思 , 使 用 s t r u c t 进 行 U p d a t e 更 新 时 \red{有一点很有意思,使用struct进行Update更新时} 使structUpdate

s t r u c t 中 属 性 值 为 空 白 值 时 则 不 更 新 \red{struct中属性值为空白值时则不更新} struct


// 只有model有DeleteAt字段才会软删除,其他都为硬删除
// 谨慎使用delete,一般业务逻辑不会允许硬删除
db.Table().Where().Delete()

//
db.Table().Create(&dbItem)


事 务 : \red{事务:}

func CreateAnimals(db *gorm.DB) err {
  tx := db.Begin()
  // 注意,一旦你在一个事务中,使用tx作为数据库句柄

  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  tx.Commit()
  return nil
}
  • 支持原生SQL
db.Exec("DROP TABLE users;")
db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33})
db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
  • 使用rows来获取原始数据
rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)
defer rows.Close()

for rows.Next() {
  var user User
  db.ScanRows(rows, &user)
  // do something
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值