GORM增删改查操作实现 | 豆包MarsCode AI刷题

55 阅读5分钟

GORM 是一款非常厉害的 Go 语言数据库操作库。说它厉害,是因为它真的能做很多事情,而且用起来很灵活。不管你是用 MySQL、PostgreSQL、SQLite 还是 SQL Server 这些不同的数据库,GORM 都能搞定。以前啊,咱们要操作数据库,就得写一大堆看起来很复杂的 SQL 语句,可现在有了 GORM 就不一样啦!咱们可以把数据库里的表想象成 Go 语言里的结构体,而表里的每一行数据就好比是一个结构体的实例。通过 GORM 提供的方法,咱们就能像操作普通的 Go 对象那样去操作数据库,简单又直观。

安装 GORM

在使用 GORM 之前,对其进行安装是必不可少的步骤。可以通过以下命令来实现 GORM 的安装:

go get -u gorm.io/gorm

然而,仅仅安装 GORM 还是不够的,我们还需要安装与之对应的数据库驱动。以 MySQL 为例,其安装命令如下:

go get -u gorm.io/driver/mysql

连接数据库

当我们完成了 GORM 和数据库驱动的安装之后,首要的任务便是创建与数据库的连接。以下是一个展示如何连接到 MySQL 数据库的示例代码:

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.Fatal(err)
    }
    log.Println("Connected to database")
}

dsn 作为字符串变量,它包含了连接到 MySQL 数据库所需的信息。这里的 user 和 password 需要替换为实际的数据库用户名和密码,dbname 需要替换为实际的数据库名称。其他部分指定了连接参数,如字符集、时间解析和时区。

并且,使用 GORM 的 Open 函数尝试连接到数据库。mysql.Open(dsn) 创建了一个 MySQL 数据库驱动实例,传入的 dsn 字符串包含了连接信息。&gorm.Config{} 是一个空的 GORM 配置对象,表示使用默认配置。函数返回两个值:一个是连接成功的数据库对象 db,另一个是可能出现的错误 err。

在使用 GORM 进行数据库操作之前,定义数据模型这一环节至关重要。数据模型通常是一个 Go 语言的结构体,GORM 会根据结构体中字段的定义来自动生成与之对应的数据库表。以下是一个简单但典型的用户模型的示例:

type User struct {
    ID        uint   `gorm:"primaryKey"`
    Name      string `gorm:"size:255"`
    Email     string `gorm:"type:varchar(100);uniqueIndex"`
    CreatedAt time.Time
    UpdatedAt time.Time
}

我们使用User 结构体表达数据结构,其中包含了用户的 ID、姓名、电子邮件以及创建和更新时间等重要信息。并且,在结构体字段上所添加的标签,其作用是用于明确指定数据库表中相应字段的具体属性。

当我们顺利完成了数据模型的定义之后,接下来便可以利用 GORM 来创建与之对应的数据库表。

db.AutoMigrate(&User{})

AutoMigrate 函数会依据结构体的定义,自动地创建或者更新数据库表,从而极大地简化了数据库表的创建过程。

在数据库表成功创建之后,我们便可以开始向其中插入数据。

user := User{Name: "Alice", Email: "alice@example.com"}
result := db.Create(&user)
if result.Error != nil {
    log.Fatal(result.Error)
}
log.Println("User created with ID:", user.ID)

我们创建了一个user对象,并且使用 GORM 的 Create 方法尝试向数据库中插入一条新的用户记录。db 是之前已经建立好的数据库连接对象,&user 是指向 user 变量的指针。Create 方法会将 user 结构体中的数据插入到数据库中,并返回一个 *gorm.DB 类型的结果对象 result

查询数据

GORM 提供了极为丰富多样的查询方法,以便我们能够从数据库中检索出所需的数据。以下是一些常见且典型的查询操作示例:

查询所有用户

var users []User
result := db.Find(&users)
if result.Error != nil {
    log.Fatal(result.Error)
}
log.Println("Users:", users)

根据 ID 查询用户

var user User
result := db.First(&user, 1) // 查询 ID 为 1 的用户
if result.Error != nil {
    log.Fatal(result.Error)
}
log.Println("User found:", user)

条件查询

var users []User
result := db.Where("name = ?", "Alice").Find(&users)
if result.Error != nil {
    log.Fatal(result.Error)
}
log.Println("Users named Alice:", users)

更新数据

GORM 允许我们以非常轻松的方式更新数据库中的记录。

result := db.Model(&user).Update("Email", "alice_new@example.com")
if result.Error != nil {
    log.Fatal(result.Error)
}

使用 Model 方法来明确指定要更新的记录,然后通过 Update 方法来更新指定的字段。update一次可盈更新一个或者多个字段

删除数据

最后,我们还可以借助 GORM 来删除数据库中的记录。

result := db.Delete(&user)
if result.Error != nil {
    log.Fatal(result.Error)
}

在这个示例中,我们使用 Delete 方法来删除指定的用户记录。 此外呢,关于Delete方法,还可以使用where去限定删除的操作,如下

db.Where("name = ?", "Bob").Delete(&User{})

总结

本文介绍了如何使用 GORM 连接数据库,并且熟练地实现了基本的增删改查操作。GORM 之所以能够受到广泛的认可和使用,正是因为其强大的功能以及简洁明了的 API 设计,使得数据库操作变得愈发简单、高效且易于掌握。

在实际的项目开发中,GORM 还拥有许多高级且实用的功能,比如事务管理,它能够确保数据库操作的原子性和一致性;预加载关联数据,使得数据的获取更加高效和便捷;软删除,提供了一种更加灵活和安全的数据删除方式等等。我们可以进一步深入阅读 GORM 的官方文档,从而能够充分利用其各项强大的功能,为项目开发带来更多的便利和创新。