这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
学习内容:「Go 框架三件套详解(Web/RPC/ORM)」
- 三件套(Gorm、Kitex、Hertz)介绍
- 三件套的使用
- 实战案例
课程目标:
- 将前面几节课所学到的知识应用到项目中
- 掌握 Hertz/Kitex/Gorm 的基本用法
- 通过学习实战案例,可以使用 Hertz/Kitex/Gorm 完成日常后端开发任务
三件套介绍
三件套使用
Gorm
基本使用
- 结构体是 Gorm 的模型,对应数据库的一张表,字段是数据库里的每个字段
- TableName() 返回的是表明,是一个约定(默认)
- gorm.Open() 根据不同驱动支持不同数据库,通过第二个参数:&gorm.Config{} 传递自定义配置,这样就初始化了一个数据库的连接,初始化了 gorm 的对象
db
gorm的基本操作
- db.Create() 支持创造一条或多条数据,通过传递一个对象或一个切片
- db.First() 查询数据,需要传指针,只支持传递一条数据
- db.Model(&product).Update() 更新字段,db.Model(&product).Updates() 传递多条,通过传递 Map 可更新零值
- db.Delete() 删除数据
Gorm 的约定(默认):
- Gorm 使用名为 ID 的字段 作为主键
- 使用结构体的 蛇形负数作为表名
- 字段名的蛇形作为列名
- 使用 CreatedAt、UpdatedAt 字段作为创建更新时间
Gorm 支持的数据库
GORM 目前支持 MySQL、SQLServer、PostgreSQL、SQLite。
//连接 SQLServer 数据库为例
import (
"gorm.io/driver/sqlserver"
"gorm.io/gorm"
)
// github.com/denisenkom/go-mssqldb
dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
db,err := gorm.Open(sqlserver.Open(dsn),&gorm.Config{})
GORM 通过驱动来连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动。
- dsn 就是包含一些连接数据库的信息
Gorm创建数据
- db.Create() 创建一条数据时,因为 gorm 是链式调用,所以会返回一个 gorm 对象
- 创建多条数据通过切片
更新数据
- 使用 clause.OnConflict 处理数据冲突
- 图中处理方式为:不处理冲突,把数据加进去
如何使用默认值
- 通过 default 标签为字段定义默认值
GORM 查询数据
- .RowsAffected 返回找到的记录数
First 的使用踩坑
- 使用 First 时,需要注意查询不到数据会返回
ErrRecordNotFound - 使用 Find 查询多条数据,查询不到数据不会返回错误(通常使用)
使用结构体作为查询条件
- 当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、"、false 或其他 零值,该字段不会被用于构建查询条件
- 使用Map 来构建查询条件