Go 框架三件套详解(Gorm) | 青训营笔记

84 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。

一、本堂课重点内容:

  • Gorm 介绍

二、详细知识点介绍:

Gorm

Gorm 是一个已经迭代了 10+ 的功能强大的 ORM 框架,在字节内部被广泛使用,并且拥有非常丰富的开源扩展

Gorm 的基本使用

  1. Gorm 使用名为 ID 的字段作为主键
  2. 使用结构体的蛇形负数作为表名
  3. 字段名的蛇形作为列名
  4. 使用 CreateAt,UpdatedAt 字段作为创建,更新时间

Grom 支持的数据库

Grom 目前支持 MySQL,SQLServer,PostgreSQL,SQLite

GORM 通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动

利用 GORM 来增删改查

  • 如何使用 Upsert? 使用 clause.onconflict 处理数据冲突

  • 如何使用默认值? 通过使用 default 标签为字段定义的默认值

  • First 的使用踩坑

    • 使用First 时,需要注意查询不到数据会返回 ErrRecordNotFound
    • 使用Find 查询多条数据,查询不到数据不会返回错误
  • 使用结构体作为查询条件,Gorm 只会查询非零值字段.这意味着如果你的字段值为 0,",false 或者其他零值,该字段不会被用于构建查询条件

  • 使用 struct 更新时,只会更新非零值,如果需要更新零值可以使用 Map 更新或使用 select 选择字段。

  • GORM 提供了 gorm. DeletedAt 用于帮助用户实现软删

    • 拥有软刷除能力的 Model 调用 Delete 时,记录不会被从数据库中真正刷除。但 GORM 会将 DeletedAt 置为当前时间, 井且你不能再通过正常的查询方法找到该记录。
    • 使用 Unscoped 可以查询到被软删的数据
  • Grom 提供了 Begin, commit,rollback 方法用于使用事务

  • Grom 提供了Tansaction 方法用于自动提交事务,避免用户漏写 commit, rollback

  • CORM 在提供了 CURD 的 Hook 能力。

    • Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数。
    • 如果任何 Hook 返回错误,GORM 将停止后续的操作井回滚事务。
  • 对于写操作(创建、更新、删除),为了确保数据的完整性。GORM 会将它们封装在事务内运行。 但这会降低性能,你可以使用 SkipDefaultTransaction 关闭默认事务。

  • 使用 PrepareStmt 存预编谭语句可以提高后续调用的速度,本机测试提高大约 35 %左右

三、课后个人总结:

Gorm 作为优秀的 ORM 框架,是 Go 不可或缺的框架

四、引用参考: