字节跳动第六届后端青训营课程《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
- 创建、查询、更新、删除等操作前后调用
- 返回错误时,停止后续操作并回滚