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

49 阅读2分钟

GORM 是 Go 语言中的一个 ORM 库,能够更方便地操作数据库。以下是关于如何使用 GORM 连接数据库,并实现常见的增、删、改、查操作的学习。

1. 安装 GORM

通过 go get 命令安装:

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite  # 示例使用 SQLite 数据库,选择适合的数据库驱动

这里使用的是 SQLite 数据库驱动,可以替换成对应的数据库驱动。

2. 创建 Go 文件和数据库连接

创建一个 Go 文件,然后通过 GORM 连接到数据库:

package main

import (
	"fmt"
	"log"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// 定义模型
type User struct {
	ID    uint   `gorm:"primaryKey"`
	Name  string `gorm:"size:255"`
	Email string `gorm:"size:255;unique"`
	Age   int
}

func main() {
	// 连接到数据库(使用 SQLite)
	db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
	if err != nil {
		log.Fatal("failed to connect to database:", err)
	}

	// 自动迁移,创建表
	err = db.AutoMigrate(&User{})
	if err != nil {
		log.Fatal("failed to migrate database:", err)
	}

	// 进行增删改查操作
	performCRUDOperations(db)
}

首先定义了一个 User 模型,包含 IDNameEmailAge 字段。然后通过 gorm.Open 方法连接到 SQLite 数据库,使用 AutoMigrate 自动创建和迁移数据库表。

3. 实现增、删、改、查操作

3.1 创建(Create)

func createUser(db *gorm.DB) {
	// 创建新的用户
	user := User{Name: "John Doe", Email: "john.doe@example.com", Age: 30}
	result := db.Create(&user)
	if result.Error != nil {
		log.Fatal("failed to create user:", result.Error)
	}
	fmt.Println("User created:", user)
}

此函数创建了一个新的 User 实例,并通过 db.Create 方法将其插入到数据库。

3.2 读取(Read)

func getUser(db *gorm.DB) {
	var user User
	// 查找用户(按 ID 查找)
	result := db.First(&user, 1) // 查找 ID 为 1 的用户
	if result.Error != nil {
		log.Fatal("failed to find user:", result.Error)
	}
	fmt.Println("User found:", user)
}

这里使用 db.First 来查找第一个符合条件的记录。也可以使用 db.Where 来执行更复杂的查询。

3.3 更新(Update)

func updateUser(db *gorm.DB) {
	var user User
	// 查找用户
	if err := db.First(&user, 1).Error; err != nil {
		log.Fatal("failed to find user:", err)
	}

	// 更新用户信息
	user.Age = 35
	result := db.Save(&user)
	if result.Error != nil {
		log.Fatal("failed to update user:", result.Error)
	}
	fmt.Println("User updated:", user)
}

首先查找用户,然后修改其年龄字段,最后通过 db.Save 方法更新记录。

3.4 删除(Delete)

func deleteUser(db *gorm.DB) {
	var user User
	// 查找用户
	if err := db.First(&user, 1).Error; err != nil {
		log.Fatal("failed to find user:", err)
	}

	// 删除用户
	result := db.Delete(&user)
	if result.Error != nil {
		log.Fatal("failed to delete user:", result.Error)
	}
	fmt.Println("User deleted:", user)
}

使用 db.Delete 删除查询到的 user

4. 完整的增删改查函数

最后,我们将增、删、改、查操作组织成一个完整的函数,方便调用。

func performCRUDOperations(db *gorm.DB) {
	// 创建用户
	createUser(db)

	// 获取用户
	getUser(db)

	// 更新用户
	updateUser(db)

	// 删除用户
	deleteUser(db)
}

5. 运行程序

完成后,通过以下命令运行程序:

go run main.go

6. GORM 常用功能

除了基本的 CRUD 操作,GORM 还提供了很多强大的功能,包括:

  • 关联查询(Associations) : 支持一对一、一对多、多对多关系。
  • 预加载(Preloading) : 自动加载相关联的表数据。
  • 事务(Transactions) : 支持事务操作。
  • 数据库迁移(Migrations) : 支持数据库表的自动迁移与管理。