这是我参与「第五届青训营」伴学笔记创作活动的第 8 天
前言
GORM是一个使用go语言编写的ORM框架,支持主流数据库,文档齐全,对开发者友好,本文将简要介绍GORM的基础使用方法。
安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
模型定义
模型是标准的struct,对应于数据库中的数据表,由go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成。
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
约定
GORM倾向于约定而不是配置,常用的默认配置如下:
-
表名:使用结构体名的
蛇形复数(xxx_xxx_xxxs)作为表名。 -
列名:使用字段名的
蛇形命名,可以使用column标签或命名策略来覆盖列名。 -
主键:默认使用
ID作为表主键,通过标签primaryKey可以将其它字段设为主键。若将多个字段设置为主键,可以创建复合主键
默认情况下,整型主键启用自增模式,若要禁用需要将字段
autoIncrement设置为false -
时间戳
CreatedAt:创建记录时,如果该字段值为零值,则将该字段的值设为当前时间。要使用不同名称的字段可以配置autoCreateTim标签。UpdatedAt:更新记录时,将该字段的值设为当前时间。创建记录时,如果该字段值为零值,则将该字段的值设为当前时间。要使用不同名称的字段可以配置autoUpdateTim标签。
DeletedAt:模型将具备软删除能力,当模型调用Delete时,记录不会从数据库中被真正删除,但 GORM 会将DeletedAt置为当前时间, 并且无法再通过普通的查询方法找到该记录。
GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,将其嵌入到结构体中可以是结构体包含上述字段。
// gorm.Model 的定义
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
嵌入结构体
- 匿名字段:GORM会将其字段包含在父结构体中
- 结构体字段:通过标签
embedded嵌入 - 为嵌入的字段名统一加前缀:标签
embeddedPrefix
字段标签
用于对字段进行设置,形式:gorm:"tag1;tag2;..."
数据库连接
GORM 官方支持的数据库类型: MySQL, PostgreSQL, SQlite, SQL Server
数据库的连接需要导入对应数据库的驱动程序,引入对应驱动并正确指定gorm.Open()参数即可实现数据库的连接。
以mysql为例(其余数据库连接参见文档gorm.cn/docs/connec…):
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
数据库基本操作
- 数据库的基本操作包括记录的创建、查询、更新和删除等,GORM提供了对应的方法支持:
Create()、First()、Find()、Update()、Delete()等。
- 除了GORM给定的数据库操作方法,GORM还支持使用原生SQL操作数据库。
- 官方文档:gorm.cn/docs/create…
总结
本文介绍了GORM的基础使用方式,主要包括框架的安装、数据库连接、模型构建、基础操作接口等,在建立数据库连接,创建模型后,我们可以通过操作接口的调用实现对数据库的基础操作,具体的使用方式可查阅官方文档。