这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
主要记录一下我对gorm学习的理解。
非常荣幸能跟着gorm的作者张金柱老师学习gorm的原理设计思想与使用。
一、声明模型
GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。gorm还提供了一些高级选项:字段级权限控制、创建/更新时间追踪(纳秒、毫秒、秒、Time)、嵌入结构体、字段标签以及关联标签。
二、CRUD接口
数据库使用最频繁的莫过于CRUD
1.查询
- [检索单个对象]
- [根据主键检索]
- [检索对象]
- [条件]
- [String 条件]
- [Struct & Map 条件]
- [内联条件]
- [Not 条件]
- [Or 条件]
- [选择特定字段]
- [Order]
- [Limit & Offset]
- [Group & Having]
- [Distinct]
- [Joins]
- [Joins 预加载]
- [Scan] 2.更新
- [保存所有字段]
- [更新单个列]
- [更新多列]
- [更新选定字段]
- [更新 Hook]
- [批量更新]
- [阻止全局更新]
- [更新的记录数]
3.删除
- [删除一条记录]
- [根据主键删除]
- [Delete Hook]
- [批量删除]
- [阻止全局删除]
- [软删除]
- [查找被软删除的记录]
- [永久删除]
三、错误处理
GORM 的错误处理与常见的 Go 代码不同,因为 GORM 提供的是链式 API。
如果遇到任何错误,GORM 会设置 *gorm.DB 的 Error 字段,您需要像这样检查它:
if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // 处理错误... }
或者
if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil { // 处理错误... }
)ErrRecordNotFound
当 First、Last、Take 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误。如果发生了多个错误,你可以通过 errors.Is 判断错误是否为 ErrRecordNotFound,例如:
// 检查错误是否为 RecordNotFound err := db.First(&user, 100).Error errors.Is(err, ErrRecordNotFound)