GORM 设计与实践
这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
GORM 设计与实践
1 理解 database/sql
1.1 基本用法
import driver 实现
使用 driver + DSN 初始化 DB 连接
1.2 设计原理
2 GORM 基础使用
2.1 背景知识
设计原则:API精简、测试优先、最小惊讶、灵活扩展、无依赖可信赖
功能完善:
- 关联:一对一、一对多、单表自关联、多态; Preload、Joins预加载、级联删除; 关联模式;自定义关联表
- 事务:事务代码块、嵌套事务、Save Point
- 多数据库、读写分离、命名参数、Map、子查询、分组条件、代码共享、 SQL表达式(查询、创建、更新)、 自动选字段、查询优化器
- 字段权限、软删除、批量数据处理、 Prepared Stmt、自定义类型、命名策略、 虚拟字段、自动 track时间、SQL Builder、 Logger代码生成、复合主键、Constraint、 Prometheus、Auto Migration、 真跨数据库兼容...
- 多模式灵活自由扩展
- Developer Friendly
2.2 CRUD
2.3 惯例约定
约定优于配置
- 表名为 struct name 的 snake_cases 复数格式
- 字段名为 field name 的 snake_case 单数格式
- ID/Id字段为主键,如果为数字, 则为自增主键
- CreatedAt字段,创建时,保存当前时间
- UpdatedAt字段,创建、更新时, 保存当前时间
- gorm.DeletedAt 字段,默认开启 soft delete 模式
2.4 关联操作
3 GORM 设计原理
3.1 SQL 是怎么生成的
- 自定义 Clause Builder
- 方便扩展 Clause
- 自由选择 Clauses
3.2 插件是怎么工作的
3.3 ConnPool是什么
4 GORM 最佳实践
- 数据序列化与 SQL 表达式
- 批量数据操作
- 代码复用、分库分表、Sharding
- 混沌工程
- Logger / Trace
- Migrator
- Gen 代码生成 / Raw SQL
- 安全