这是我参与「第三届青训营 -后端场」笔记创作活动的的第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.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等