设计模式之 DatabaseSQL 与 GORM 实践(五)|青训营笔记
设计模式之 DatabaseSQL 与 GORM 实践(五)|青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第五篇笔记。
本章目录:

理解database/sql
基本用法
首先配置GO的环境,把GoPath配置好:https://blog.csdn.net/qq_40027172/article/details/118828110
可以查看官网中给出的包的示例,我们先了解一下DSN(Data Source Name)是什么:

其实就是连接的一行。。里面有着ip地址和参数之类的数据,在很多地方可以用“连接字符串”替代。

这段代码就是获取数据库中users的值
和大多数的数据库连接类似,给出连接ip和密码以及连接参数,有执行语句,但是一定要记得defer关闭,虽说rows.Next()也可以关闭,但是保不准会出现错误直接return了。
设计原理

连接池是为了分担连接压力,更好的复用连接。
DSN会需要字符串,但是有些字符串可能无法转义。
需要一直import Driver。
所以后来做成了结构体。

这样就不会忘记import,因为有强制的编译的检查。

GORM基础使用
背景知识

基本用法

和之前的长代码一样的内容,但是简洁了很多。
CRUD

Model定义

例如User表应当被命名为users。
关联操作

关联的CRUD

Preload/Joins 预加载

级联删除

GORM设计原理

SQL是怎么生成的
SQL本来的样子:

GORM的实现:

Chain Method如何实现的:

Finisher实现:

为什么这样子设计:

自定义Builder:

扩展字句:

选择字句:

插件是怎么工作的



注册的新的Callback会在上面的所有之后执行。
为什么要这样设计:

多租户:

搞一个过滤器。
多数据库、读写分离:

ConnPool
是什么:

预编译:


一行代码提升效率:关闭预编译?

Dialector
字节封装的bytegorm,一套sql规范。

借助Dialector实现,Dialector是什么:

橙色的就是Dialector

GORM最佳实践

数据序列化与SQL表达式
- 表达式更新创建
  
- SQL表达式查询
  
- 数据序列化
  
批量数据操作
- 批量创建/查询
  
 避免大量数据读到内存产生OOM的问题,所以上面可以100条100条的查询。
- 批量更新
  
- 批量数据加速操作
  
代码复用、分库分表、Sharding
- 代码复用
  
- 分库分表
  
- Sharding
  
混沌工程/压测


Logger/Trace

Migrator

Gen代码生成
Raw SQL - Raw SQL:

Raw代码多了不好管理好像
Raw SQL - Gen:

安全问题


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号