这是我参与「第五届青训营 」笔记创作活动的第5天
1 课程介绍
目标 1Gorm 2 Kitex 3 Hertz
2三件套的使用 基础使用 定义gorm model 表 为 model 定义表名 连接数据库 初始化数据库链接 传递自定义配置 创建数据 查询数据 更新数据
gorm.cn/zh_CN/docs/… Gorm的约定 名为ID的字段作为主键 结构体蛇形负数作为表名 字段名蛇形作为列名 CreatedAt、UpdatedAt字段作为创建更新时间 GORM支持的数据库 MySQL、SQLServer、PostgreSQL、SQLite 通过驱动连接数据库 可复用、自行开发驱动
什么是DSN github.com/go-sql-driv…
GORM创建数据
upsert 使用clause.OnConflict 使用默认值 defaut标签为字段定义默认值
first 注意查询不到数据会返回ErrRecordNotFound find查询多条数据查询不到不会返回错误 find查询一组 查不到返回空数组
使用结构体作为查询条件 只查询非零值字段 使用Map构建查询条件
更新数据 Struct更新是 只会更新非零值 更新零值可以使用Map或使用Select
GORM提供了gorm.DeletedAt用于帮助用户实现软删 拥有软删除能力的Model调用Delete时,记录不会被从数据库中真正删除。但GORM 会将DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。 使用Unscoped可以查询到被软删的数据
GORM事务 Gorm提供了 Begin、Commit、Rollback方法用于使用事务 Gorm提供了Tansaction方法用于自动提交事务,避免用户漏写Commit、Rollbcak。
GORM在提供了CURD的Hook 能力。 Hook是在创建、查询、更新、删除等操作之前、之后自动调用的函数。 如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。
GORM性能提高
对于写操作(创建、更新、删除),为了确保数据的完整性,GORM会将它们封装在事务内运行。但这会降低性能,你可以使用SkipDefaultTransaction关闭默认事务。
使用PrepareStmt 缓存预编译语句可以提高后续调用的速度
https:/lgorm.cn/zh_CN/docs/performance.html
3实战案例