- GORM 秀才 2025年2月14日 大约 6 分钟 Go语言 Go语言 golang gorm mysql 数据库 此页内容 1. 安装GORM和MySQL驱动 2. 连接数据库 3. 初始化连接 4. 定义模型 5. 自动迁移 6. CRUD操作 6.1 创建记录 6.2 查询记录 6.3 更新记录 6.4 删除记录 7. 事务支持 8. 预处理和SQL注入 9. 完整示例 9.1 程序输出 9.2 代码说明 10. 小结 GORM是一个功能强大的Go语言ORM库,提供了简洁的API来操作数据库。本文将详细介绍如何使用GORM与MySQL数据库进行交互。 1. 安装GORM和MySQL驱动 首先,我们需要安装GORM和MySQL驱动。可以使用以下命令:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
- 连接数据库 在使用GORM连接MySQL数据库时,我们需要提供数据源名称(DSN),其中包含用户名、密码、主机地址、端口号和数据库名称等信息。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func main() {
// 定义数据源名称
dsn := "user:password@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 {
log.Fatalf("failed to connect database: %v", err)
}
}
- 初始化连接 GORM会自动管理数据库连接池,因此我们不需要手动设置最大连接数和最大空闲连接数。不过,如果有特殊需求,可以通过 sql.DB 对象进行设置。
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("failed to get database object: %v", err)
}
// 设置最大打开连接数
sqlDB.SetMaxOpenConns(100)
// 设置最大空闲连接数
sqlDB.SetMaxIdleConns(10)
- 定义模型 在GORM中,我们通过定义结构体来映射数据库表。每个字段对应表中的一列。
// User 结构体映射到数据库中的users表
type User struct {
ID uint `gorm:"primaryKey;column:id"` // ID为主键
Name string `gorm:"size:255;column:name"` // Name字段最大长度为255
Age int `gorm:"column:age"` // Age字段
}
- 自动迁移 GORM提供了自动迁移功能,可以根据模型结构自动创建或更新数据库表。
// 自动迁移User结构体
db.AutoMigrate(&User{})
- CRUD操作 6.1 创建记录 使用 Create 方法可以向数据库中插入一条新记录。
// 创建一个新的User记录
user := User{Name: "张三", Age: 25}
result := db.Create(&user)
if result.Error != nil {
log.Fatalf("failed to create user: %v", result.Error)
}
6.2 查询记录 6.2.1 单行查询 使用 First 方法可以查询符合条件的第一条记录。
// 查询ID为1的User记录
var user User
result := db.First(&user, 1) // 根据主键查询
if result.Error != nil {
log.Printf("failed to find user: %v", result.Error)
}
6.2.2 多行查询 使用 Find 方法可以查询符合条件的多条记录。
// 查询年龄大于20的所有User记录
var users []User
result := db.Where("age > ?", 20).Find(&users)
if result.Error != nil {
log.Printf("failed to find users: %v", result.Error)
}
6.3 更新记录 使用 Save 方法可以更新记录。
// 更新User记录的Age字段
user.Age = 26
result := db.Save(&user)
if result.Error != nil {
log.Fatalf("failed to update user: %v", result.Error)
}
6.4 删除记录 使用 Delete 方法可以删除记录。
// 删除User记录
result := db.Delete(&user)
if result.Error != nil {
log.Fatalf("failed to delete user: %v", result.Error)
}
- 事务支持 GORM支持事务操作,可以通过 Transaction 方法来执行事务。
// 使用事务创建两个User记录
err := db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&User{Name: "李四", Age: 30}).Error; err != nil {
return err
}
if err := tx.Create(&User{Name: "王五", Age: 35}).Error; err != nil {
return err
}
return nil
})
if err != nil {
log.Fatalf("transaction failed: %v", err)
}
- 预处理和SQL注入 GORM会自动处理SQL注入问题,因此我们不需要手动拼接SQL语句。所有的查询条件都可以通过链式调用来实现。
// 查询Name为"张三"的User记录
db.Where("name = ?", "张三").First(&user)
- 完整示例 以下是一个完整的示例代码,展示了如何使用GORM连接MySQL数据库并进行CRUD操作。
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
// User 结构体映射到数据库中的users表
type User struct {
ID uint `gorm:"primaryKey;column:id"` // ID为主键
Name string `gorm:"size:255;column:name"` // Name字段最大长度为255
Age int `gorm:"column:age"` // Age字段
}
func main() {
// 定义数据源名称
dsn := "user:password@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 {
log.Fatalf("failed to connect database: %v", err)
}
// 自动迁移User结构体
db.AutoMigrate(&User{})
// 创建一个新的User记录
user := User{Name: "张三", Age: 25}
result := db.Create(&user)
if result.Error != nil {
log.Fatalf("failed to create user: %v", result.Error)
}
// 查询ID为1的User记录
var queriedUser User
result = db.First(&queriedUser, user.ID) // 根据主键查询
if result.Error != nil {
log.Printf("failed to find user: %v", result.Error)
} else {
fmt.Printf("Queried User: %+v\n", queriedUser)
}
// 更新User记录的Age字段
queriedUser.Age = 26
result = db.Save(&queriedUser)
if result.Error != nil {
log.Fatalf("failed to update user: %v", result.Error)
}
// 删除User记录
result = db.Delete(&queriedUser)
if result.Error != nil {
log.Fatalf("failed to delete user: %v", result.Error)
}
}
9.1 程序输出 假设数据库连接成功,程序将输出如下信息:
Queried User: {ID:1 Name:张三 Age:25}
这表示程序成功创建、查询、更新并删除了一条用户记录。 9.2 代码说明 连接数据库 :使用 gorm.Open 方法连接MySQL数据库,数据源名称(DSN)中包含了数据库连接的必要信息。 自动迁移 :使用 AutoMigrate 方法根据 User 结构体自动创建或更新数据库表。 创建记录 :使用 Create 方法向数据库中插入一条新记录。 查询记录 :使用 First 方法查询符合条件的第一条记录。 更新记录 :使用 Save 方法更新记录。 删除记录 :使用 Delete 方法删除记录。 10. 小结 这篇文章简单介绍了GORM的基本使用方法,包括连接数据库、定义模型、CRUD操作、事务支持等内容。希望对您有所帮助!,如需了解GORM详细的用法,可以参考: GORM中文官网 关注秀才公众号: IT杨秀才 ,领取精品学习资料 公众号后台回复: Go面试 ,领取Go面试题库PDF 公众号后台回复: Go学习 ,领取Go必看书籍 公众号后台回复: 大模型 ,领取大模型学习资料 公众号后台回复: 111 ,领取架构学习资料 公众号后台回复: 26届秋招 ,领取26届秋招企业汇总表
🔥 配套实战项目,拆得开、跑得起、能写进简历 多 Agent 编排 + RAG 混合检索 · 31 篇深度教程 + 50+ 面试题 点击查看 DevSupport AI 实战项目 → 在 GitHub 上编辑此页 上次编辑于: 2026/6/24 23:41:22 贡献者: Percygu , Your Name , gupeng 上一页 1. Gin