这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
一、 本堂课重点内容
1. 理解database/sql
Database/sql基本用法。设计原理,基础概念介绍
2. Grom使用简介
Grom基本用法,Model定义,惯例约定,关联介绍
3. Grom设计原理
SQL生成,扩展机制,ConnPool,Dialector等
4. Grom最佳实践
Grom最佳实践,企业级开发,FAQ等
二、 详细知识点介绍
2.1 基本用法
代码分析:
行1-8:import driver实现,使用driver+DSN初始化DB连接
行10-14:执行一条SQL,通过rows取回返回的数据,处理完毕,释放连接
行16-26:数据错误处理
行28-30:错误处理
2.2设计原理
DB连接的几种类型:直接连接/Conn,预编译/stmt,事务/Tx
处理返回数据的几种方式:
Exec /ExecContext -Result
Query QueryContext -Rows (Columns)
QueryRow/QueryRowContext->Row(Rows简化)
2.3 Grom基础使用
2.3.1 背景知识
设计原则:API精简,测试优先,最小惊讶,灵活扩展,无依赖,可信赖
功能完善:
关联:一对一、一对多、单表自关联、多态;Preload、Joins预加载、级联删除;关联模式;自定义关联表
事务:事务代码块、嵌套事务、Save Point
多数据库、读写分离、命名参数、Map、子查询、分组条件、代码共享、SQL表达式(查询、创建、更新)、自动选字段、查询优化器
字段权限、软删除、批量数据处理、Prepared Stmt、.自定义类型、命名策略、虚拟字段、自动track时间、SQL Builder、Logger
代码生成、复合主键、Constraint、Prometheus、Auto Migration、真·跨数据库兼容…
多模式灵活自由扩展
Developer Friendly
2.3.2 基本用法-CRUD
2.3.3 模型定义
约定:
表名为struct name的snake cases复数格式
字段名为field name的snake_case单数格式
ID/Id字段为主键,如果为数字,则为自增主键
CreatedAt字段,创建时,保存当前时间
UpdatedAt字段,创建、更新时,保存当前时间
gorm.DeletedAt字段,默认开启soft delete模式
2.3.4 关联介绍
关联操作-CRUD
关联操作-Preload/Joins预加载
关联操作-级联删除
2.4 Gorm设计原理
2.4.1 SQL是如何生成的
GORM API 方法添加Clauses至GORM Statement
GORM Finisher方法执行GORM Statement
自定义Builder
扩展子句
选择子句
2.4.2 插件是怎么工作的
多租户
多数据库,读写分离
2.4.3 ConnPool是什么
在全局模式下,所有DB操作都会预留编译并缓存(缓存不包含参数部分)
连接池作用:
查找缓存的预编译SQL
未找到,将收到的SQL和Vars预编译
使用缓存的预编译SQL执行
2.4.4 Dialector
定制SQL生成
定制GORM插件
定制ConnPool
定制企业特性逻辑
三、 实践练习例子
3.1 数据序列化与SQL表达式
SQL表达式更新创建
SQL表达式查询
数据序列化
3.2批量数据操作
批量创建/查询
批量更新
批量数据加速操作
3.3代码复用,分库分表。Sharding
代码复用
分库分表
Sharding
3.4混沌工程/压测
3.5 Logger/Trace
3.6数据库迁移
3.7 Gen代码生成/Raw SQL
3.8安全问题
四、 课后个人总结
这节课主要介绍了GORM框架的相关使用,在基础的CRUD上讲述了设计原理,底层的代码实现,以及对一些底层数据结构的操作。能帮助更好的使用此框架。