设计模式之 Database/SQL | 青训营笔记

125 阅读1分钟

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


理解database/sql

Quick Start

import 数据库 driver

Open()通过DSN初始化DB链接

Query()查询语句

注意Close()时会出现错误

Err()返回数据库操作时的错误信息

设计原理

database/SQL对上层应用实现操作接口

对下层数据库实现连接接口、操作接口

自己实现连接池

除了DSN还有Config方式描述数据库连接

DB连接的几种类型

  • Conn直接连接
  • Stmt预编译
  • 事务Tx

处理返回数据的几种方式

  • Exec/ExecContent -> Result
  • Query/QueryContext -> Row(Columns)
  • QueryRow/QueryRowContext -> Row(Rows简化)

GORM基础使用

基本用法

GORM官方网站

模型定义

gorm.model结构体里有常用的字段。

惯例约定

约定优于配置

  • 表名为结构体的snake_cases复数
  • 字段名是snake_case单数
  • ID/Id为主键,如果是数字,那么自增
  • CreatedAt字段创建时保存当前时间
  • UpdatedAt字段创建、更新时保存当前时间
  • gorm.DeletedAt字段,默认开启soft delete模式

关联介绍

GORM提供了关联支持。

Preload()/Joins()预加载

使用Select()级联删除

GORM设计原理

GORM在database/sql上加了一层。

自定义子句Builder,方便扩展子句,自由选择子句。

插件配置

ConnPool

读写分离

预编译

  • 查找缓存的预编译SQL
  • 未找到,预编译SQL
  • 使用缓存的预编译SQL执行

interpolateParams=false

关闭预编译SQL

dialactor定制

定制SQL等

GORM最佳实践