GORM总结|青训营笔记

333 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

主要记录一下我对gorm学习的理解。

非常荣幸能跟着gorm的作者张金柱老师学习gorm的原理设计思想与使用。

一、声明模型

GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间。gorm还提供了一些高级选项:字段级权限控制、创建/更新时间追踪(纳秒、毫秒、秒、Time)、嵌入结构体、字段标签以及关联标签。

二、CRUD接口

数据库使用最频繁的莫过于CRUD

1.查询

  • [检索单个对象]
    1. [根据主键检索]
  • [检索对象]
  • [条件]
    1. [String 条件]
    2. [Struct & Map 条件]
    3. [内联条件]
    4. [Not 条件]
    5. [Or 条件]
  • [选择特定字段]
  • [Order]
  • [Limit & Offset]
  • [Group & Having]
  • [Distinct]
  • [Joins]
    1. [Joins 预加载]
  1. [Scan] 2.更新
  • [保存所有字段]
  • [更新单个列]
  • [更新多列]
  • [更新选定字段]
  • [更新 Hook]
  • [批量更新]
    1. [阻止全局更新]
    2. [更新的记录数]

3.删除

  1. [删除一条记录]
  2. [根据主键删除]
  3. [Delete Hook]
  4. [批量删除]
    1. [阻止全局删除]
  5. [软删除]
    1. [查找被软删除的记录]
    2. [永久删除]

三、错误处理

GORM 的错误处理与常见的 Go 代码不同,因为 GORM 提供的是链式 API。

如果遇到任何错误,GORM 会设置 *gorm.DBError 字段,您需要像这样检查它:

if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // 处理错误... }

或者

if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil { // 处理错误... }

)ErrRecordNotFound

FirstLastTake 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误。如果发生了多个错误,你可以通过 errors.Is 判断错误是否为 ErrRecordNotFound,例如:

// 检查错误是否为 RecordNotFound err := db.First(&user, 100).Error errors.Is(err, ErrRecordNotFound)