这是我参与「第五届青训营」伴学笔记创作活动的第 3 天
今日学习了GO开发框架三件套:ORM框架-Gorm,RPC框架-Kitex,Web框架-Hertz
首先了解下三件套的作用
- ORM:Object Relational Mapping,帮助操作数据库的,这样就不需要输入复杂的SQL语句,而是像对待普通对象那样进行操作。
- RPC:remote procedure call. 很多时候,代码中的实现与定义是分开的,采用分布式的方式,调用需要通过网络请求,这样的话如果自己写需要写很多的http请求语句,进行大量的三次握手四次挥手等。RPC框架能够让开发者省去这些操作,无感的使用远程调用。
- WEB:对外提供API服务。
三件套整体流程:Hertz进行接口聚合,调用kitex的Client,通过Client调用下游的Kitex Server,Server通过Gorm去查询或处理数据库的数据。
下面对三个框架进行介绍
Gorm
gorm与数据库进行连接并创建相关表。
Gorm的约定:
- 默认使用名为ID的字段作为主键。
- 如果没有设置TableName方法设置表名的话则会使用结构体的蛇形复数作为表名。使用字段名的蛇形作为列名。
gorm通过驱动来连接数据库,目前支持MySQL、SQLServer、PostgreSQL、SQLite
Gorm查询
使用First 时,需要注意查询不到数据会返回ErrRecordNotFound.使用Find查询多条数据,查询不到数据不会返回错误。 使用结构体作为查询条件。当使用结构作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为0、"、false 或其他零值,该字段不会被用于构建查询条件,使用Map来构建查询条件。
Gorm更新数据
使用structure更新时,只会更新非零值,如果需要将零值更新进去,则需要使用map更新或使用Select选中字段。
Gorm删除操作
分为物理删除和软删除。物理删除就是真正的删除了。软删。GORM提供了gorm.DeletedAt用于进行软删。原理是将Gorm标准表中的DeletedAt 置为删除操作的当前时间。软删后无法通过常规的first或者find方法查询被删除的记录了。使用Unscoped方法可以查询到被软删的数据。