这是我参与「第五届青训营 」伴学笔记创作活动的第5天。
0、重点
- Gorm
- Kitex(后续)
- Hertz(后续)
1、Gorm
参考文档:GORM指南
1.1 Gorm的基本使用
- gorm的基本使用:
- 定义gorm model
- 为model定义表名
- 连接数据库
- 创建数据
- 查询数据
- 更新数据
- 删除数据
package main import ( "gorm.io/gorm" "gorm.io/driver/sqlite" ) type Product struct { gorm.Model Code string Price uint } func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // 迁移 schema db.AutoMigrate(&Product{}) // Create db.Create(&Product{Code: "D42", Price: 100}) // Read var product Product db.First(&product, 1) // 根据整形主键查找 db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录 // Update - 将 product 的 price 更新为 200 db.Model(&product).Update("Price", 200) // Update - 更新多个字段 db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段 db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"}) // Delete - 删除 product db.Delete(&product, 1) } - Gorm的约定:
- Gorm使用名为ID的字段作为主键
- 使用结构体的蛇形负数作为表名
- 字段名的蛇形作为列名
- 使用CreateAt、updateAt字段作为创建、更新时间
1.2 Gorm支持的数据库
- Gorm目前支持MySQL、SQLServer、PostgreSQL
- Gorm通过驱动来连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动
1.3 Gorm 创建数据
- 如何使用 Upsert
- 使用clause.OnConflict处理数据冲突
- 如何使用默认值
- 通过使用defalut标签为字段定义默认值
1.4 Gorm 查询数据
- 使用First时查询不到数据会返回ErrRecordNotFound
- 使用find查询多条数据,查询不到数据不会返回错误
- 使用结构体作为查询条件时,gorm只会查询非零字段
1.5 Gorm 更新数据
1.6 Gorm 删除数据
- 物理删除
- 软删除
- gorm.DeleteAt实现软删除
1.7 Gorm 事务
- Grom 提供了Begin、Commit、Rollback方法用于使用事务
- Grom 提供了Tansaction 方法用于自动提交事务,避免用户漏写Commit、Rollback
1.8 Gorm Hook
- Gorm 在提供了CURD的 Hook 能力
- Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数
- 如果任何Hook返回错误,Gorm将停止后续的操作并回滚事务。