这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。
一、本堂课重点内容:
- Gorm 介绍
二、详细知识点介绍:
Gorm
Gorm 是一个已经迭代了 10+ 的功能强大的 ORM 框架,在字节内部被广泛使用,并且拥有非常丰富的开源扩展
Gorm 的基本使用
- Gorm 使用名为 ID 的字段作为主键
- 使用结构体的蛇形负数作为表名
- 字段名的蛇形作为列名
- 使用 CreateAt,UpdatedAt 字段作为创建,更新时间
Grom 支持的数据库
Grom 目前支持 MySQL,SQLServer,PostgreSQL,SQLite
GORM 通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动
利用 GORM 来增删改查
-
如何使用
Upsert? 使用clause.onconflict处理数据冲突 -
如何使用默认值? 通过使用
default标签为字段定义的默认值 -
First 的使用踩坑
- 使用First 时,需要注意查询不到数据会返回
ErrRecordNotFound - 使用
Find查询多条数据,查询不到数据不会返回错误
- 使用First 时,需要注意查询不到数据会返回
-
使用结构体作为查询条件,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 不可或缺的框架