Database/Sql与Gorm设计与实践 | 青训营笔记

99 阅读2分钟

Database/Sql与Gorm设计与实践 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

本节课主要介绍:

一、理解database&sql

1.基本用法

import driver 实现

使用 driver + DSN 初始化DB 连接

执行一条SQL,通过rows2取回返回的数据 处理完毕,需要释放链接

数据、错误处理

2.设计原理

DB连接的几种类型:

直接连接/Conn

预编译/Stmt

事务/Tx

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

Exec ExecContext -Result

Query QueryContext->Rows (Columns)

QueryRow/QueryRowContext->Row(Rows简化)

处理返回数据的几种方式

二、Gorm基础使用

1.背景知识

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

功能完善:

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

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

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

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

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

6.多模式灵活自由扩展

7.Developer Friendly

2.基本用法-crud

image.png

3.模型定义

约定优于配置 表名为struct name的snake cases复数格式 字段名为field name的snake_case单数格式 ID/Id字段为主键,如果为数字,则为自增主键 CreatedAt字段,创建时,保存当前时间 UpdatedAt字段,创建、更新时,保存当前时间 gorm.DeletedAt字段,默认开启soft delete模式

4.关联操作

CRUD: image.png Preload/Joins预加载:

image.png 级联删除:

image.png

三、Gorm设计原理

image.png

插件是怎么工作的:

Finisher Method->决定Statement类型->执行Callbacks->生成SQL并执行

Create->Query->Update->Delete->Row->Raw

引用

字节内部课-Database/sql 及 GORM 相关解读 - 掘金 (juejin.cn)