课程笔记:Go框架三件套(Web/RPC/ORM) | 青训营

130 阅读2分钟

字节跳动第六届后端青训营课程《Go 框架三件套详解(Web/RPC/ORM)》的笔记,听课时随手记录,简短且混乱

三件套介绍

Gorm

在字节内部广泛使用的ORM框架

Kitex

Golang微服务RPC框架,高新能,强可扩展

Hertx

HTTP框架,高易用性、高性能、高扩展性

基础使用

Gorm

定义gorm model

包括字段ID、CreatedAt、UpdatedAt、DeleteAt

定义表名

一般使用字段ID作为主键,当gorm model没有定义ID时,默认使用结构体的蛇形复数作为表名,字段名的蛇形作为例名

连接数据库

通过MySql建立数据库链接

基本操作

创建数据 db.Create()

  • 创建一条数据时传递一个对象
  • 创建多条数据时传递一个slice
  • 定义Product结构体
  • 链式调用(使用Result返回)
  • Upsert处理数据冲突

查询数据

  • db.First() 默认查一条数据(传递指针),当查询不到数据时会return ErrRecordNotFound
  • 因此,通常使用db.Find()查找,当查询不到数据时,返回空数组,而不是直接返回错误
  • 复杂条件使用db.Where()
  • 只查询非零字段,当字段值包含0、false等零值时,应该使用Map

更新数据 Update

  • 更新单列时需要设置表名
  • struct 只更新非零值
  • map 可更新零值(也可使用Select)

删除数据 Delete

  • 物理删除 直接使用db.Delete() 一旦删除无法恢复
  • 软删除(实际应用中应该使用!!) 通过gorm.DeleteAt()和db.Unscoped()完成软删除和软删除数据的查询

数据库

  • MySQL
  • SQLServer
  • PostgreSQL
  • SQLite 通过驱动连接数据库

GORM事务

Begin

固化链接,开始事务

Commit

提交事务

Rollback

遇到错误时回滚

Tansaction

自动提交事务,避免漏写

Hook

  • 创建、查询、更新、删除等操作前后调用
  • 返回错误时,停止后续操作并回滚