使用 GORM 连接数据库并实现增删改查操作 | 豆包MarsCode AI 刷题

50 阅读4分钟

使用 GORM 连接数据库并实现增删改查操作

GORM 是 Go 语言中的一个 ORM(对象关系映射)库,它可以帮助开发者将结构体与数据库表格进行映射,从而使数据库操作更加简洁。本文将介绍如何使用 GORM 连接数据库,并实现常见的增、删、改、查(CRUD)操作。

一、安装 GORM

在开始之前,你需要安装 GORM。可以通过 Go 的 go get 命令来安装:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql  # 这里使用 MySQL 驱动,其他数据库可根据需要选择

二、数据库连接

1. 配置数据库连接

首先,我们需要创建一个数据库连接。以 MySQL 为例,以下是连接数据库的代码示例:

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

func ConnectDatabase() {
	// 配置数据库连接信息
	dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8&parseTime=True&loc=Local"
	var err error
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("连接数据库失败:", err)
		panic("数据库连接失败")
	}
	fmt.Println("数据库连接成功")
}

func main() {
	ConnectDatabase()
}

在上面的代码中:

  • dsn(Data Source Name)是数据库连接字符串,包含了用户名、密码、数据库地址、端口、数据库名称等信息。
  • gorm.Open 会初始化并返回一个数据库连接实例。
  • 如果连接失败,我们输出错误信息并停止程序执行。

2. 创建数据库表格

GORM 可以自动根据定义的 Go 结构体创建数据库表格。为了让 GORM 知道数据库表结构,我们需要定义一个结构体,并使用 gorm.Model 或者自定义字段映射到数据库表的列。

type User struct {
	ID        uint   `gorm:"primaryKey"`
	FirstName string `gorm:"size:100"`
	LastName  string `gorm:"size:100"`
	Email     string `gorm:"uniqueIndex"`
	Age       int
}

User 结构体对应数据库中的 users 表,gorm:"primaryKey" 表示该字段为主键,gorm:"uniqueIndex" 表示该字段为唯一索引。

然后使用 GORM 自动迁移功能来创建表格:

func MigrateDatabase() {
	err := DB.AutoMigrate(&User{})
	if err != nil {
		fmt.Println("表格迁移失败:", err)
	} else {
		fmt.Println("表格迁移成功")
	}
}

3. 运行程序

确保数据库已经启动并且已创建。调用 MigrateDatabase() 函数来自动创建 users 表。

func main() {
	ConnectDatabase()
	MigrateDatabase()
}

三、增(Create)操作

GORM 提供了多种方式来插入数据。最常见的方式是使用 Create() 方法:

func CreateUser() {
	user := User{
		FirstName: "John",
		LastName:  "Doe",
		Email:     "john.doe@example.com",
		Age:       30,
	}

	result := DB.Create(&user)
	if result.Error != nil {
		fmt.Println("创建用户失败:", result.Error)
	} else {
		fmt.Println("用户创建成功:", user)
	}
}

在这里,我们创建了一个 User 实例并通过 DB.Create() 插入数据到数据库。如果插入成功,result.Errornil,否则会输出错误信息。

四、查(Read)操作

查询数据是最常见的操作之一。GORM 提供了多种方式来查询数据,下面是一些常见的查询操作。

1. 查找单个用户

func FindUserByID(id uint) {
	var user User
	result := DB.First(&user, id) // 查找 id 为指定值的第一条记录
	if result.Error != nil {
		fmt.Println("用户查找失败:", result.Error)
	} else {
		fmt.Println("用户信息:", user)
	}
}

2. 查找多个用户

func FindUsersByAge(age int) {
	var users []User
	result := DB.Where("age = ?", age).Find(&users)
	if result.Error != nil {
		fmt.Println("查找用户失败:", result.Error)
	} else {
		fmt.Println("符合条件的用户:", users)
	}
}

3. 查询所有用户

func FindAllUsers() {
	var users []User
	result := DB.Find(&users)
	if result.Error != nil {
		fmt.Println("查找所有用户失败:", result.Error)
	} else {
		fmt.Println("所有用户信息:", users)
	}
}

五、改(Update)操作

GORM 提供了多种方法来更新数据。以下是一个常见的更新操作示例:

func UpdateUserAge(id uint, newAge int) {
	var user User
	result := DB.First(&user, id)
	if result.Error != nil {
		fmt.Println("用户查找失败:", result.Error)
		return
	}

	user.Age = newAge
	result = DB.Save(&user)
	if result.Error != nil {
		fmt.Println("更新用户失败:", result.Error)
	} else {
		fmt.Println("用户年龄更新成功:", user)
	}
}

在这里,我们首先通过 First() 查找用户,然后更新 Age 字段,最后使用 Save() 方法将修改后的数据保存到数据库。

六、删(Delete)操作

删除数据操作也很简单,使用 Delete() 方法可以删除数据。

func DeleteUser(id uint) {
	var user User
	result := DB.First(&user, id)
	if result.Error != nil {
		fmt.Println("用户查找失败:", result.Error)
		return
	}

	result = DB.Delete(&user)
	if result.Error != nil {
		fmt.Println("删除用户失败:", result.Error)
	} else {
		fmt.Println("用户删除成功")
	}
}

在这里,我们首先查找需要删除的用户,确认该用户存在后,调用 Delete() 方法删除该记录。

七、总结

通过本文的示例代码,你应该能够使用 GORM 实现基本的增、删、改、查操作。GORM 提供了丰富的功能来处理数据库操作,包括事务处理、关联查询、预加载等高级特性。如果你熟悉了这些基本操作,可以继续深入学习 GORM 的更多功能来提高你的数据库操作效率。