这是我参与「第五届青训营」伴学笔记创作活动的的第5天
本节课内容如下
目录
1-1 课程目标
1-2 三件套介绍
1-3 gorm的基本使用
1-4 gorm支持的数据库
1-5 gorm查询数据
1-6 gorm更新数据
1-7 gorm删除数据
01 Gorm
1-1 课程目标
- 将前面几节课所学到的知识应用到项目中
- 掌握Hertz/Kitex/Gorm的基本用法
- 通过学习实战案例,可以使用Hertz/Kitex/Gorm完成日常后端开发任务
1-2 三件套介绍
- Gorm:Gorm是一个已经迭代了十年的ORM框架
- Kitex:字节内部的Golang微服务RPC框架
- Hertz:字节内部的HTTP框架
1-3 Gorm的基本使用
- 定义gorm model
type Product struct{
Code string
Price uint
}
- 为model定义表名
func (p Product) TableName() string{
return "product"
}
1-4 Gorm支持的数据库
gorm目前支持Mysql、SQLserver、PostgreSQL、SQLite。
gorm通过驱动来连接数据库,如果需要连接其他类型的数据库,可以复用/自行开发驱动
使用clause.OnConflict处理数据冲突、
p :=&Product{Code :"D42",ID:1}
db.Clauses(clause.OnConflict{DoNothing:true}).Create(&p)
1-5 Gorm查询数据
first的使用踩坑:
使用first时,需要注意查询不到数据会返回ErrRecordNotFound。
使用find查询多条数据,查询不到数据不会返回错误
使用结构体作为查询条件:
当使用结构作为条件啊查询时,Gorm只会查询非零值字段。这意味着如果您的字段值为0、”、false或其他零值,该字段不会被用于构件查询条件,使用Map来构件查询条件。
1-6 Gorm更新数据
使用struct更新时,只会更新非零值,如果需要更新零值可以使用map更新或使用select选择字段。
1-7 Gorm删除数据
物理删除
db.Delete(&User{},conds...10)// DELETE FROM users WHERE id=10;
软删除
Gorm提供了gorm.DeletedAt用于帮助用户实现软删
拥有软删能力的Model调用Delete时,记录不会被从数据库中真正删除。但Gorm会将DeleteAt置为当前时间,并且你不能再通过正常的查询方式找到该记录。
使用Unscoped 可以查询到被软删的数据