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

62 阅读3分钟

引言

GORM 是 Go 语言中一个强大的 ORM(对象关系映射)库,用于与数据库进行交互。本文将介绍如何使用 GORM 连接数据库,并展示如何执行常见的数据库操作,包括增加(Create)、删除(Delete)、修改(Update)、查询(Read)等。

1. 连接数据库

首先,我们需要导入 GORM 包并连接到数据库。GORM 支持多种数据库,如 MySQL、PostgreSQL、SQLite 等。在本示例中,我们将连接到一个SQLite数据库。

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

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()
}

在以上示例中,我们使用 sqlite.Open 打开了一个 SQLite 数据库连接,并创建了一个名为 tuotuo79-test.db 的数据库文件。务必在使用完数据库后关闭连接,以释放资源。

2. 创建数据表和模型

在 GORM 中,数据表对应着 Go 语言中的结构体(Struct)。我们需要定义一个结构体,用于描述数据库中的表结构,并通过 GORM 的迁移(Migration)功能创建数据表。

// 定义模型
type User struct {
    ID   uint   // 主键
    Name string // 用户名
    Age  uint   // 年龄
}

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()

    // 自动创建 User 表
    db.AutoMigrate(&User{})
}

以上代码定义了一个 User 结构体,它对应数据库中的 users 表。通过 db.AutoMigrate(&User{}) 可以自动创建或更新数据库表,以保持与结构体的一致性。

3. 插入数据

要将数据插入到数据库中,我们可以创建一个新的 User 对象并使用 Create 方法。

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()

    // 自动创建 User 表
    db.AutoMigrate(&User{})

    // 插入数据
    user := User{Name: "Tuotuo", Age: 30}
    db.Create(&user)
}

以上示例中,我们创建了一个名为 Tuotuo 年龄为 25 的用户,并使用 db.Create(&user) 将其插入到数据库中。

4. 查询数据

GORM 提供了强大的查询功能。以下是一个查询所有用户的示例:

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()

    // 自动创建 User 表
    db.AutoMigrate(&User{})

    // 查询所有用户
    var users []User
    db.Find(&users)

    for _, user := range users {
        fmt.Printf("ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
    }
}

以上代码使用 db.Find(&users) 查询数据库中的所有用户,并将结果存储在 users 切片中,然后遍历并打印每个用户的信息。

5. 更新数据

要更新数据库中的数据,可以使用 Save 方法。

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()

    // 自动创建 User 表
    db.AutoMigrate(&User{})

    // 查询用户
    var user User
    db.First(&user, 1) // 查询 ID 为 1 的用户
    fmt.Printf("原始信息:ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)

    // 更新用户信息
    db.Model(&user).Update("Age", 35)

    // 查询并打印更新后的用户信息
    db.First(&user, 1)
    fmt.Printf("更新后信息:ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
}

在上述示例中,我们首先查询了ID为1的用户信息,然后使用 db.Model(&user).Update("Age", 35) 更新了用户的年龄,并再次查询并打印用户的信息以验证更新是否成功。

6. 删除数据

要删除数据库中的数据,可以使用 Delete 方法。

func main() {
    // 连接到 SQLite 数据库
    db, err := gorm.Open(sqlite.Open("tuotuo79-test.db"), &gorm.Config{})
    if err != nil {
        panic("无法连接到数据库")
    }
    defer db.Close()

    // 自动创建 User 表
    db.AutoMigrate(&User{})

    // 删除用户
    var user User
    db.First(&user, 1) // 查询 ID 为 1 的用户
    fmt.Printf("将删除用户信息:ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)

    // 执行删除操作
    db.Delete(&user)

    // 查询并打印删除后的用户信息
    db.First(&user, 1)
    if user.ID == 0 {
        fmt.Println("用户已删除")
    }
}

在以上示例中,我们首先查询了ID为1的用户信息,然后使用 db.Delete(&user) 删除了用户,最后再次查询并打印用户信息以验证删除成功。

结论

本文介绍了如何使用 GORM 连接数据库,并实现了增加、删除、修改、查询等常见的数据库操作。通过 GORM,我们可以轻松地管理数据库操作,使得与数据库的交互更加方便和高效。

参考

GORM 官方文档