使用 GORM 连接数据库并实现 CRUD 操作 | 青训营
简介
GORM(Go 的对象关系映射库)提供了一个强大的 ORM 解决方案,可以让 Go 语言程序更容易的使用数据库。它内置了创建表、查询数据、插入数据等常见操作。
在本文中,我们将使用 GORM 来:
- 连接 MySQL 数据库
- 定义模型
- 实现 CRUD(Create/Read/Update/Delete) 操作
安装 GORM
使用 go get 命令安装 GORM 和 MySQL 驱动:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
连接数据库
在开始使用 GORM 之前,我们需要先建立与数据库的连接。在 Go 语言中,我们可以通过 GORM 提供的 Open() 函数来连接数据库。
首先导入需要的包:
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
然后使用如下代码连接数据库:
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{})
- dsn 是数据源名称,包含了数据库的访问信息,需要自行替换实际的数据库信息
- 使用 mysql.Open 打开连接
- gorm.Open 获得一个 ORM 对象用于操作数据库
定义模型
比如,我们要操作用户表,可以定义一个 User 模型:
type User struct {
gorm.Model
Name string
Email string
}
- gorm.Model 包含 ID、CreatedAt、UpdatedAt、DeletedAt 字段
- 然后定义用户名和邮箱字段
自动建表
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 用户模型
type User struct {
gorm.Model
Name string
Email string
}
func main() {
// 连接数据库
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{})
if err != nil {
panic("failed to connect database")
}
// 自动建表
db.AutoMigrate(&User{})
// 插入数据
db.Create(&User{Name: "张三", Email: "zhangsan@example.com"})
}
主要步骤:
- 定义模型 struct,并且在 struct 中嵌入
gorm.Model获得一些默认字段 - 使用
db.AutoMigrate(&User{})会自动创建表,如果表已存在,则根据 struct 添加任何缺失的字段 - 最后我们用
db.Create插入一条数据,至此整个自动建表和 CRUD 流程完成。
GORM会自动命名表名为结构体名称的复数形式,也支持自定义表名。只需在模型struct上使用Table标签指定表名即可。
CRUD 操作
创建数据
使用 Create 方法创建新记录:
user := User{Name: "张三", Email: "zhangsan@example.com"}
db.Create(&user)
这将在 user 表中插入一条记录。
查询数据
使用 First 查询第一条记录:
var user User
db.First(&user)
使用 Find 查询多条记录:
var users []User
db.Find(&users)
更新数据
先查询记录,然后修改结构体字段,最后保存:
var user User
db.First(&user)
user.Name = "李四"
db.Save(&user)
删除数据
db.Delete(&user)
总结
GORM 为 Go 提供了功能强大的 ORM 支持,使用它可以大大简化数据库操作。本文演示了使用 GORM 连接数据库、定义模型、实现增删改查的基本用法。GORM 还支持高级功能如关联、事务等,可以开发复杂的数据库应用。