GORM is a fantastic ORM library for Golang.

// TODO: To be updated…
目录
1. 快速开始
1.1 GORM 概述
- 全功能 ORM(几乎)
- 关联(包含一个/包含多个/属于/多对多/多态)
- Callbacks(在创建/保存/更新/删除/查找之前或之后)
- 预加载
- 事务
- 复合主键
- SQL Builder
- 数据库自动迁移
- 自定义日志
- 可扩展性,可基于 GORM 回调编写插件
- 每个功能都有测试
- 开发人员友好
1.2 安装
1.3 快速体验
以MySQL
为例:
2. 数据库
2.1 连接数据库
首先需要导入目标数据库的驱动程序。例如:
为了方便记住导入路径,GORM
包装了一些驱动:
MySQL
注意:为了处理time.Time
,需要包括parseTime
作为参数。更多支持的参数
也可以参照之前的形式来写:
PostgreSQL
SQLite3
2.2 迁移 Migrate
自动迁移(Auto Migrate)模式将自动保持更新到最新。
注意:自动迁移仅仅会创建表以及缺少的列和索引,并不会改变现有列的类型或删除未使用的列,以保护数据
2.3 检查表是否存在
2.4 创建表
2.5 删除表
2.6 修改列
2.7 删除列
2.8 添加外键
2.9 索引
3. 模型
3.1 模型定义
3.2 约定
gorm.Model 结构体
基本模型定义gorm.Model
,包括字段ID
、CreatedAt
、UpdatedAt
、DeletedAt
。
gorm.Model
在gorm
目录下的model.go
中定义:
可以将它嵌入你的模型,或者只写需要的字段:
表名是结构体名的复数
更改默认表名
可以通过定义DefaultTableNameHandler
对默认表名应用任何规则:
列名是字段名的蛇形小写
字段 ID 为默认主键
字段 CreatedAt 存储创建时间
创建具有CreatedAt
字段的记录将被设置为当前时间:
字段 UpdatedAt 存储修改时间
保存具有UpdatedAt
字段的记录将被设置为当前时间:
字段 DeletedAt 用于存储删除时间
删除具有
DeletedAt
字段的记录时,记录本身不会从数据库中删除,只是将字段DeletedAt
设置为当前时间,并且该记录在查询时无法被找到,即软删除。
3.3 关联
Belongs To
A
belongs to
association sets up a one-to-one connection with another model, such that each instance of the declaring model “belongs to” one instance of the other model.
例如,如果您的应用程序包含用户和配置文件,并且可以将每个配置文件分配给一个用户:
4. Code Snippets
5. 高级用法
5.1 错误处理
执行任何操作后,如果发生任何错误,GORM 会将其设置为*DB
的Error
字段:
5.2 事务
要在事务中执行一组操作,一般流程如下:
一个具体的例子:
5.3 SQL 构建
执行原生 SQL
sql.Row & sql.Rows
获取查询结果为*sql.Row
或*sql.Rows
:
迭代中使用 sql.Rows 的 Scan
5.4 通用数据库接口 sql.DB
从*gorm.DB
连接获取通用数据库接口*sql.DB
:
设置连接池:
5.5 复合主键
将多个字段设置为主键以启用复合主键:
5.6 日志
Gorm 有内置的日志记录器支持,默认情况下,它会打印发生的错误:
也可以自定义Logger
:
参见:
// TODO: To be updated…