设计模式之database sql与GORM实践 | 青训营笔记

113 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。

1.理解database/sql

1.1 基本用法

      import driver,使用driver+DSN初始化DB连接

1.2 设计原理

      应用程序-操作接口-database/sql-连接接口/操作接口-数据库

      DB连接的几种类型:直接连接/Conn;预编译/Stmt;事务/Tx

 

2.GORM基础使用

2.1 背景

      1.设计原则:API精简、测试优先、最小惊讶、灵活扩展、无依赖可信赖

2.功能完善:

关联:一对一、一对多、单表自关联、多态;Preload、Joins 预加载、级联删除;关联模式;自定义关联表

事务:事务代码块、嵌套事务、Save Point

多数据库、读写分离、命名参数、Map、子查询、分组条件、代码共享、SQL表达式(查询、创建、更新)、自动选字段、查询优化器

字段权限、软删除、批量数据处理、Prepared Stmt、自定义类型、命名策略、虚拟字段、自动track时间、SQL Buider、Logger

代码生成、复合主键、Constraint、Prometheus、Auto Migration、真·跨数据库兼容

多模式灵活自由扩展

Developer Friendly

2.2 基本使用--CRUD

2.3 模型定义—惯例约定

1.表名为struct name的snake_cases复数格式

2.字段名为fleld name的snake_case单数格式

3.ID/ld字段为主键,如果为数字,则为自增主键

4.createdAt字段,创建时,保存当前时间

5.UpdatedAt字段,创建、更新时,保存当前时间

6.gorm.DeletedAt字段,默认开启soft delete模式

2.4 关联操作

      1.Preload/Joins预加载  2.级联删除

 

3.GORM设计原理

3.1 SQL

      1.SELECT    2.FROM      3.WHERE    4.ORDER BY    5.LIMIT  6.FOR

3.2 插件

      1.Create      2.Query      3.Update     4.Delete      5.Row 6.Raw

3.3 ConnPool

      查找缓存的预编译SQL;未找到,将收到的SQL和Vars预编译;使用缓存的预编译SQL执行

3.4 Dialector

      1.定制SQL生成 2.定制GORM 插件 3.定制ConnPool 4.定制企业特性逻辑

 

4.GORM最佳实践

4.1 SQL表达式更新创建查询与数据序列化

4.2 批量数据操作

      1.批量创建/查询     2.批量更新        3.批量数据加速操作

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

4.4 混沌工程/压测

4.5 Logger/Trace

4.6 Migrator—数据库迁移管理

4.7 Gen代码生成/RAW SQL

4.8 安全问题—SQL注入