Go框架三件套| 青训营

79 阅读2分钟

Go 3件套

介绍

1693044728366.png

基础使用

Gorm的基础使用

  • 1693045016193.png
  • 连接数据库,增删改查操作
Gorm支持的数据库
  • Gorm目前支持MySQL、SQLServer、PostgreSQL、SQLite
  • 1693045370575.png
  • DSN(包含了一些数据库的信息)
  • GORM通过驱动来连接是数据库,若需其他类型的数据库,可以复用/自行开发驱动。
Gorm创建数据
  • 1693045704922.png
  • db.Create()是链式调用,使用后还会返回Gorm对象,所以可以用res接收Gorm对象后使用res.Error来获取err.

创建数据的时候,如果遇到唯一索引冲突,如何处理?

  • 使用Upsert
  • Gorm中提供了支持,用clause.OnConflict处理数据冲突
  • 1693046645236.png
  • 起了冲突,但是先以不处理冲突,只是把数据插进去

Gorm中要设置一些默认值,如何处理?

  • 通过使用default标签为字段定义默认值
  • 1693046940310.png
Gorm查询数据
  • 1693047276372.png

First的使用踩坑

使用 First 时,需要注意查询不到数据会返回 ErrRecordNotFound. 使用 Find 查询多条数据,查询不到数据不会返回错误。

使用结构作为条件查询

当使用结构作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为 0、"、false 或其他 零值该字段不会被用于构建查询条件,使用Map 来构建查询条件

Gorm更新数据
  • 1693047437989.png
  • 使用 Struct 更新时,只会更新非零值,如果需要更新零值可以使用 Map 更新或使用Select 选择字段
Gorm删除数据
  • 物理删除
  • 1693047498079.png
  • 软删除
  • 1693047557335.png
  • GORM 提供了 gorm.DeletedAt 用于帮助用户实现软删
  • 拥有软删除能力的 Model 调用 Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间,
  • 使用 Unscoped 可以查询到被软删的数据
Gorm事务
  • Gorm 提供了 Begin、Commit、 Rollback 方法用于使用事务
  • 1693047620917.png
  • Gorm 提供了 Tansaction 方法用于自动提交事务,避免用户漏写 Commit、 Rollbcak.
  • 1693047704033.png
GormHook

1693047790435.png

  • GORM 在提供了 CURD 的 Hook 能力
  • Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数 如果任何 Hook 返回错误,GORM 将停止后续的操作并回滚事务
Gorm性能提高
  • 1693047889642.png
  • 对于写操作(创建、更新、删除),为了确保数据的完整性
  • GORM 会将它们封装在事务内运行但这会降低性能,可以使用 SkipDefaultTransaction 关闭默认事务
  • 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度,本机测试提高大约 35 %左右
Gorm生态
  • GORM 拥有非常丰富的扩展生态,以下列举一部分常用扩展
  • 1693047832492.png