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

137 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记。 课程目标

  • 了解 Go 的 Database/SQL的实现
  • 了解 GORM 的实现原理、使用简单
  • 以及如何基于 GORM 做一些定制化开发

1. 理解 database/sql

1.1 基本用法

  • 使用driver + DSN 初始化 DB 连接
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello")
    
  • 执行一条SQL,通过rows取回返回的数据;处理完毕,需要释放链接
    rows, err := db.Query("select id, name from users where id=?", 1)
    if err != nil {// xxx}
    defer rows.Close()
    

1.2 设计原理

image.png

image.png

2. GORM 使用简介

2.1 背景知识

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

  • 关联
  • 事务
  • 多数据库、读写分离、命名参数、...
  • 字段权限
  • 代码生成、符合主键

3. GORM 设计原理

image.png

3.1 Sql是怎么生成的

image.png

image.png

3.2 插件时怎么工作的

image.png 灵活定制 自由扩展 多租户 多数据库、读写分离 加解密

3.3 ConnPool是什么

image.png

image.png

最佳实践

  1. 数据序列化sql表达式
  2. 批量数据操作
  3. 代码复用、分库分表
  4. 混沌工程、压测 5.LOoger/trace 6.Migrator 7.Gen代码生成 8 安全