Gorm简介|青训营笔记

113 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的的第5天

本节课内容如下

目录

1-1 课程目标

1-2 三件套介绍

1-3 gorm的基本使用

1-4 gorm支持的数据库

1-5 gorm查询数据

1-6 gorm更新数据

1-7 gorm删除数据

01 Gorm

1-1 课程目标
  1. 将前面几节课所学到的知识应用到项目中
  2. 掌握Hertz/Kitex/Gorm的基本用法
  3. 通过学习实战案例,可以使用Hertz/Kitex/Gorm完成日常后端开发任务
1-2 三件套介绍
  1. Gorm:Gorm是一个已经迭代了十年的ORM框架
  2. Kitex:字节内部的Golang微服务RPC框架
  3. Hertz:字节内部的HTTP框架
1-3 Gorm的基本使用
  1. 定义gorm model
type Product struct{
    Code string
    Price uint
}
  1. 为model定义表名
funcp 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 可以查询到被软删的数据