GORM 快速开始

1. 前置知识

1. Golang 中结构体

定义:

1
2
3
4
5
6
type UserInfo struct {
ID uint
Name string
Gender string
Hobby string
}

使用:

1
2
user1 := UserInfo{1, "小明", "男", "篮球"} // 初始化
fmt.Println(user1.ID, user1.Name) // 读取字段

2. ORM 概念

数据表 结构体
数据记录 结构体实例
数据字段 结构体字段

3. GORM 安装

1
2
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql # 所需的数据库驱动

4. 数据库连接

  1. 指定 dsn (Data Source Name): 告诉 数据库驱动 如何处理数据
1
2
3
4
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
// charset=utf8mb4: 默认为 utf8 不支持 emoji
// parseTime=True: 日期时间读取后自动字符串转 Time 类型
// loc=Local: 默认为 UTC
  1. 使用 dsn 连接数据库
1
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

5. 创建表自动迁移

1
2
3
4
5
6
7
type UserInfo struct {
ID uint
Name string
Gender string
Hobby string
}
db.AutoMigrate(&UserInfo{})
  • 默认会创建 user_infos 表 (大驼峰改下划线加复数)
  • AutoMigrate 可重复多次执行, 如结构体发生变化则会修改, 无则无操作

6. GURD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1. 新增
// 根据结构体类型匹配数据表, 并添加数据
u1 := UserInfo{1, "小明", "男", "篮球"}
db.Create(&u1)

// 2. 查询
var u2 UserInfo
db.First(&u2, "name = ?", "小明")

// 3. 更新
// 根据 u1 的类型匹配表, 根据 u1 的主键匹配记录, 最后将指定字段修改为指定值
db.Model(&u1).Update("hobby", "羽毛球")

// 4. 删除
// 根据 u1 的类型匹配表, 根据 u1 的主键匹配记录, 最后删除
db.Delete(&u1)

参考
a. GORM 官网
b. BV1U7411V78R