设计模式之Database/SQL与GORM实践 | 青训营笔记

163 阅读2分钟

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

一、sql

应用程序-操作接口-sql-连接接口、操作接口-数据库
DSN:数据源名称,体现与数据源连接的关联数据结构的字符串
基本使用:import driver,使用driver+DSN初始化DB连接;rows取数据
关键:连接池,从连接池获取连接或通过driver新建;连接实现driver.Queryer、driver.Execer等
interface;连接放回连接池
连接接口:注册全局driver;使用结构体DSN,无需全局变量driver
操作接口: DB连接的类型:直接连接、预编译、事务
处理返回数据: Exec/ExecContext->result
Query/QueryContext->Rows
QueryRow/QueryRowContext->Row

二、GORM简介

简洁的ORM:对象关系映射,因为go基于对象,但数据库基于关系,需要规定映射规则以简化代码
基本用法:可以将row读取简化为select,可以批量创建更新删除
Model定义:可以将嵌套的内容平铺出来
惯例约定:约定优于配置
关联操作:支持外键、多对多、多态、preload/joins预加载、级联删除

三、GORM原理

sql生成 数据库语句->GORM statement

自定义Clause Builder;方便扩展Clause;自由选择Clause
插件扩展:多租户;多数据库、读写分离;加解密、混沌工程

GORM->SQL->ConnPool->连接池->数据库
↑实现接口
DB Conn(写or读DB)

预编译SQL,调用,关闭
dialector:定制SQL生成,定制GORM插件,定制ConnPool,定制企业特性逻辑。

四、GORM实践

数据序列化与SQL表达式
gorm.Expr、GORMValuer、SubQuery
批量数据操作
代码复用、分库分表,Sharding
混沌工程/压测
Logger/Trace
Migrator 数据库迁移
Gen代码生成/Raw SQL
安全:以参数传入,防止SQL注入