[ Database/sql 及 GORM 相关解读、GORM 设计原理、GORM 最佳实践 | 青训营笔记 ]

120 阅读2分钟

一. 理解database/sql

1.基本用法——Quick Start

01.处理完取返回的数据时,需要释放链接,不然可能导致资源泄露。

02.易遗漏的错误

- image.png

- image.png

2.设计原理

image.png

01.连接池的管理方法

  • 连接池配置
  • 连接池状态

02.DB连接的几种类型

  • 直接连接, Conn
  • 预编译, Stmt
  • 事务/ Tx

03.处理返回数据的几种方式

  • Exec / ExecContext > Result
  • Query / QueryContext > Rows (Columns)
  • QueryRow / QueryRowContext > Row (Rows简化)

二. GORM使用简介

“ 设计简洁、功能强大、自由扩展的全功能ORM ”

1.基本用法——CRUD

2.Model定义

3.惯例约定

一切都可配置

★表名为struct name的snake_ cases 复数格式

★字段名为field name的snake_ case 单数格式

★ID/Id字段为主键,如果为数字,则为自增主键

★CreatedAt字段,创建时,保存当前时间

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

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

4.关联介绍——CRUD

5.关联操作——Preload / Joins预加载

6.关联操作——级联删除

三. GORM设计原理

image.png

1.SQL生成

01.GORM API方法添加Clauses至GORM Statement

02.GORM Finisher方法执行GORM Statement

2.为什么生成SQL

      • ▲ 自定义Clause Builder
      • ▲ 方便扩展Clause
      • ▲ 自由选择Clauses

1)自定义Builder

2)扩展子句

3)选择子句

image.png

3.为什么设计插件

      • ▲ 灵活定制
      • ▲ 自由扩展

4.插件是怎么工作的

▲ 多租户

▲ 多数据库、读写分离

▲ 加解密、混沌工程...

5.ConnPool

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

6.interpolateParams=false

1.执行前预编译SQL

2.调用预编译的SQL

3.关闭预编译的SQL

7.Dialector

  • 定制SQL生成
  • 定制GORM插件
  • 定制ConnPool
  • 定制企业特性逻辑

四. GORM最佳实践

1. GORM最佳实践

01.数据序列化与SQL表达式
1】.数据序列化与SQL表达式——SQL表达式更新创建
2】.数据序列化与SQL表达式——SQL表达式查询
3】.数据序列化与SQL表达式——数据序列化

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

03.代码复用、分库分表、Sharding
1】.代码复用、分库分表、Sharding——代码复用
2】.代码复用、分库分表、Sharding——分库分表
3】.代码复用、分库分表、Sharding——Sharding

04.混沌工程/压测

05.Logger/ Trace

06.Migrator
1】.Migrator——数据库迁移管理
2】.Migrator——数据库迁移

07.Gen代码生成/ Raw SQL
1】.Gen代码生成/ Raw SQL——Raw SQL
2】.Gen代码生成/ Raw SQL——Gen

08.安全

2.企业级开发

3.FAQ

五.个人感悟

  1. 要学的东西还有很多。

  2. Keep going!

  3. 多敲代码。