- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
GORM 剖析与最佳实践
GORM 剖析与最佳实践 - ⼤纲
- GORM 五分钟快速⼊⻔
- SQL 是怎么⽣成的(Locking,Optimizer Hints,Batch Upsert) • 插件是怎么⼯作的(读写分离,Open Tracing,压测平台)
- 最佳实践 & FAQ
展开查看详情
1 .GORM 剖析与最佳实践 张⾦柱 @ 字节跳动 GORM - The fantastic ORM library for Golang
2 .ABOUT ME Jinzhu / 张⾦柱 • Github: @jinzhu • 字节跳动:@zhangjinzhu • GORM 官⽹:https://gorm.io https://gorm.cn(国内 CDN)
3 .GORM 剖析与最佳实践 - ⼤纲 • GORM 五分钟快速⼊⻔ • SQL 是怎么⽣成的(Locking,Optimizer Hints,Batch Upsert) • 插件是怎么⼯作的(读写分离,Open Tracing,压测平台) • 最佳实践 & FAQ
4 .GORM 五分钟快速⼊⻔ - 初始化
5 .GORM 五分钟快速⼊⻔ - 常⻅⽤法
6 .SQL是怎么⽣成的 (SQL Statement & Clauses)
7 .SQL是怎么⽣成的 (SQL Statement & Clauses) SELECT Clause SQL STATEMENT FROM Clause expression WHERE Clause expression ORDER BY Clause LIMIT Clause FOR Clause
8 .SQL是怎么⽣成的 (GORM Statement & Clauses) SELECT Clause STATEMENT LIMIT Clause ORDER BY Clause WHERE Clause FROM Clause
9 .SQL是怎么⽣成的 - 使⽤ Clause / 修改 Clause Builder - Locking SELECT SQL + Locking Clause Locking Clause ⽣成不同 SQL
10 .SQL是怎么⽣成的 - Clause 钩⼦ - Hints 添加到 SELECT Clause 后 添加到 FORM Clause 后 Before, After Name, After 某 Clause
11 .SQL是怎么⽣成的 - 修改 Clause / 重新组装 Clause - Batch Upsert 批量插⼊ 批量插⼊ & 忽略错误 批量插⼊ || 更新现有数据 批量插⼊ || 更新现有数据
12 .插件是怎么⼯作的 - GORM Callbacks GORM Callbacks ⽀持 Create, Update, Delete, Query, Row, Raw 六种 Callbacks 执⾏ Create 的过程 取出注册的 Create Callbacks 并调⽤
13 .插件是怎么⼯作的 - GORM Callbacks GORM 默认 Create Callbacks GORM Callbacks API 指定 Callbacks 顺序
14 .插件是怎么⼯作的 - GORM Callbacks - OpenTracing
15 .插件是怎么⼯作的 - GORM Callbacks - 多数据库/读写分离 注册 GORM Callbacks db2 为主数据库(全局) db3, db4 为从数据库(全局) db5 为从数据库,默认连接 db1 为主数据库 (User,Address) 指定写模式 指定策略组 secondary 指定写模式 + 策略组
16 .插件是怎么⼯作的 - Callbacks/Hooks API
17 .插件是怎么⼯作的 - Callbacks/Hooks API
18 .最佳实践 & FAQ - 更新零值问题 ⽅法 1 ⽅法 2 ⽅法 3 ⽅法 4
19 .最佳实践 & FAQ - 使⽤ SQL 表达式创建/更新数据 通过 Map 使⽤ SQL 表达式创建 通过 struct ⽤ SQL 表达式
20 .最佳实践 & FAQ - ⾃定义数据类型 / 使⽤ SQL 表达式查询数据 ⾃定义类型 SQL 表达式查询
21 .最佳实践 & FAQ - 共享代码 共享分⻚逻辑代码
22 .最佳实践 & FAQ - 数据库事务 关闭全局默认事务 会话关闭默认事务 嵌套事务 事务代码块
23 .最佳实践 & FAQ - 字段权限设置 字段读、创建、更新权限 ⽆创建权限 未创建 ⽆读取权限
24 .最佳实践 & FAQ - 关联模型定义 User 拥有⼀个 Account (has one), 拥有多个 Pets (has many), 多个 Toys (多态 has many) 属于某 Company (belongs to) 属于某 Manager (单表 belongs to) 管理 Team (单表 has many) 会多种 Languages (many to many) 拥有很多 Friends (单表 many to many) 并且他的 Pet 也有⼀个玩具 Toy (多态 has one)
25 .最佳实践 & FAQ - 关联模式 关联模式常⻅操作
26 .最佳实践 & FAQ - 关联模式预加载
27 .最佳实践 & FAQ - To Be Continue • 关联模式批量操作 / 关联的级联删除 • 数据库连接参数 • 分库分表 • CreateInBatches • Find To Map • Sub Query / From Sub Query / SQL Builder • Group Conditions • Iteration / Find In Batches • Prepared Statements • 默认值问题 / 虚拟字段 • Soft Delete • gorm.Config • 修改默认命名策略 • Logger • New Driver Support • Session Mode • Time Tracking (Unix Seconds/Milli/Nano Seconds) • Hooks • DryRun Mode • 复合主键 • Indexes / Checker • Prometheus • Performance • …
28 .GORM 剖析与最佳实践
29 .GORM 剖析与最佳实践 Q&A