GORM 框架基本介绍 | 青训营笔记

79 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

Gorm的基本使用

只用first会出现问题,记得传入指针

更新数据,可以用.table。更新零值用map

gorm创建数据

链式调用 res.Error,遇到冲突,clause.OnConflict{DoNothing" true}

默认值 default 标签

GORM查询数据

使用first时,查询不到数据会返回 ErrRecordNotFound,所以使用find查询多条数据,查询不到会返回空数组

可以用select api选定字段

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

GORM更新数据

使用Struct更新时,只会更新非零值,如果需要更新零值,可以使用Map更新或使用Select选择字段

可以使用gorm.Expr表达式更新

GORM删除数据

物理删除是真删除了,实际开发中要使用软删除。

软删除:gorm会将DeleteAt置为当前时间,并且不能再通过正常的查询方法找到该记录,可以使用Unscoped查询到被软删的数据。

按规范编写代码,天然支持防SQL注入

GORM事务

GORM提供了Begin、Commit、Rollback方法用于使用事务

在事务中执行一些db操作,应该使用tx而不是db

忘记rollback可能会导致连接泄露

gorm提供了Transaction方法用于自动提交事务,避免用户漏写Commit、Rollback

GORM Hook

GORM在提供了CURD的Hook能力,Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。

GORM性能提高

SkipDefaultTransacton关闭默认事务,使用PrepareStmt缓存预编译语句提高后续调用速度,

GORM生态