GO框架三件套day5 | 青训营笔记

73 阅读2分钟

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

01GROM

通过GROM操作链接数据库实现接口

通过grom.Open获取db对象

db.Create() //创建数据
db.First() //查找单条数据
db.Create() //查找多条数据
db.Update() //更新单条数据
db.Updates() //更新多条数据
db.Delete() //删除数据

Gorm的约定(默认)

Gorm使用名为ID的字段作为主键

使用结构体的蛇形负数作为表名

字段名的蛇形作为列名

使用CreatedAt、UpdatedAt字段作为创建、更新时间

通过使用default标签为字段定义默认值

使用clause.OnConflict处理数据冲突

First的使用踩坑

使用 First时,需要注意查询不到数据会返回ErrRecordNotFound。

使用Find查询多条数据,查询不到数据不会返回错误。

使用结构体作为查询条件

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

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

GROM分物理删除和软删除

物理删除用Delete

软删除

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

拥有软删除能力的Model 调用Delete时,记录不会被从数据库中真正删除。但GORM会将DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。

使用 Unscoped可以查询到被软删的数据

GROM事务 一致性保证

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

db.Begin()返回一个新的对象不能再用db来接受

02Kitex

使用IDL定义服务与接口

如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。这时候,就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

03Hertz

Hertz提供了Bind、Validate、BindAndValidate函数用于进行参数绑定和校验