day5-设计模式之Database-SQL-与GORM实践
这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
「设计模式之 Database/SQL 与 GORM 实践」 第三届字节跳动青训营

同时这也是课表的第5天课程

PC端阅读效果更佳,点击文末:阅读原文即可。
01 理解database/sql
基本用法,设计原理,基础概念
1.1基本用法-Quick Start
了解 DSN 是什么:
- https://github.com/go-sql-driver/mysql#dsn-data-source-name
- https://en.wikipedia.org/wiki/Data_source_name
1.2 设计原理

查看go的源码
接下来看连接池

连接池配置
连接池状态
Driver 连接接口
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
02 GORM基础使用
基本用法,Model定义,惯例约定,关联操作
2.1背景知识
设计简洁、功能强大、自由扩展的全功能ORM
- 设计原则: API精简、测试优先、最小惊讶、灵活扩展、无依赖可信赖
- 功能完善:
- 关联:一对一、一对多、单表自关联、多态;Preload、 Joins 预加载、级联删除;关联模式;自定义关联表
- 事务:事务代码块、嵌套事务、Save Point
- 多数据库、读写分离、命名参数、Map、子查询、分组条件、代码共享、SQL表达式(查询、创建、更新)、自动选字段、查询优化器
- 字段权限、软删除、批量数据处理、Prepared Stmt、自定义类型、命名策略、虚拟字段、自动track时间、SQL Builder、Logger
- 代码生成、复合主键、Constraint、 Prometheus、 Auto Migration、真 跨数据库兼容…
- 多模式灵活自由扩展
- Developer Friendly
2.2基本用法
先install
2.2基本用法-CRUD
github:https://github.com/nateshao/gin-demo/blob/main/gin-demo-17-gorm-mysql/main.go
新建
2.3模型定义-惯例约定
约定优于配置
- 表名为struct name的snake_ cases复数格式
- 字段名为field name的snake_ case单数格式
- ID/ ld字段为主键,如果为数字,则为自增主键
- CreatedAt字段,创建时,保存当前时间
- UpdatedAt字段,创建、更新时,保存当前时间
- gorm.DeletedAt字段,默认开启soft delete模式
一切皆可配置:https://gorm.io/docs/conventions.html

2.4关联介绍

2.4关联操作-CRUD

2.4关联操作-Preload / Joins预加载

2.4关联操作-级联删除

03 GORM设计原理
SQL生成,插件扩展,ConnPool,Dialector

- SQL是怎么生成的
- 插件是怎么工作的
- ConnPool是什么
- Dialector
3.1SQL是怎么生成的




为什么这样处理呢?
- 自定义Clause Builder
- 方便扩展Clause
- 自由选择Clauses
3.1 SQL是怎么生成的-自定义Builder

image-20220515202111720
3.1SQL是怎么生成的-扩展子句

image-20220515202429309

3.2插件是怎么工作的




3.2插件是怎么工作的-多租户

3.2插件是怎么工作的-多数据库、读写分离

3.3 ConnPool是什么

image-20220515203958422

3.3 ConnPool是什么

image-20220515204441871

image-20220515204617325

3最开始的问题


3.4 Dialector是什么


04 GORM最佳实践
- 数据序列化与SQL表达式
- 批量数据操作
- 代码复用、分库分表、Sharding
- 混沌工程/压测
- Logger/ Trace
- Migrator
- Gen代码生成/ Raw SQL
- 安全
4.1数据序列化与SQL表达式- SQL表达式更新创建

4.1数据序列化与SQL表达式- SQL表达式查询

4.1数据序列化与SQL表达式-数据序列化

4.2批量数据操作-批量创建/查询

4.2批量数据操作-批量更新

4.2批量数据操作-批量数据加速操作

4.3代码复用、分库分表、Sharding -代码复用



4.4混沌工程/压测

image-20220515230435595

image-20220515230655898
4.5 Logger / Trace

4.6 Migrator -数据库迁移管理


4.7 Gen代码生成, Raw SQL - Raw SQL

4.8安全问题
https://gorm.io/docs/security.html

总结

Loading...