设计模式之 DatabaseSQL 与 GORM 实践(五)|青训营笔记
2022/6/5 2:20:25
本文主要是介绍设计模式之 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:
安全问题
这篇关于设计模式之 DatabaseSQL 与 GORM 实践(五)|青训营笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南