Go框架三件套之Gorm笔记整理|青训营笔记

110 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 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的约定:

  1. 默认使用名为ID的字段作为主键。
  2. 如果没有设置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方法可以查询到被软删的数据。