一、GROM基础使用 1.背景知识
“设计简洁、功能强大、自由扩展的全功能ORM" 设计原则:API 精简、测试优先、最小惊讶、灵活扩展、无依赖 可信赖 功能完善: 关联:一对一、一对多、单表自关联、多态;Preload、Joins预加载、级联删除;关联模式;自定义关联表
事务:事务代码块、嵌套事务、Save Point
多数据库、读写分离、命名参数、Map、子查询、分组条件、代码共享、SQL表达式(查询、创建、更新)、自动选字段、查询优化器
字段权限、软删除、批量数据处理、Prepared Stmt、自定义类型、命名策略、虚拟字段、自动 track 时间、SQL Builder、Logger
代码生成、复合主键、Constraint、Prometheus、Auto Migration、真·跨数据库兼容...
多模式灵活自由扩展
Developer Friendly 2.基本用法-CRUD 创建 user:=User{Name:“Jinzhu”,Age:18,Birthday:time.Now()} result:=db.Create(&user) 更新某字段 db.Model(&product).Update(“Price”,2000) 删除 db.delete(&product) 3.模型定义-惯例约定
约定优于配置 表名为 struct name 的snake_cases复数格式 字段名为 field name 的snake_case 单数格式ID/ld 字段为主键,如果为数字,则为自增主键 CreatedAt 字段,创建时,保存当前时间 *UpdatedAt 字段,创建、更新时,保存当前时间 *gorm.DeletedAt 字段,默认开启soft delete 模式 一切都可配置
二、设计原理 应用程序→GROM 操作接口 database/sql连接接口 操作接口 数据库 1.SQL是怎么生成的
SELECT Clause FROM Clause WHERE Clause ORDER BY Clause LIMIT Clause FOR Clause
GORM API 方法添加 Clauses 至GORM Statement GORM Finisher 方法执行 GORM Statement
GORM为什么这么做,主要有以下几个原因: 自定义Clause Builder 方便扩展Clause 自由选择Clause 2.插件是怎么工作的 Finisher Method →决定Statement类型→执行Callbacks →生成SQL并执行 预定义CREATE CALLBACKS 执行Create 的过程,依次调用注册的Create Callbackas 为什么?→多租户 多数据库、读写分离 加解密、混沌工程……
多租户 自动通过租户ID实现操作的过滤。 多数据库、读写分离 三、GROM最佳实践
1 数据序列化与 SQL表达式 2 批量数据操作 Migrator 3 代码复用、分库分表、Sharding 4 混沌工程 5 Logger / Trace 6 Migrator 7 Gen 代码生成/Raw SQL 8 安全