在 golang 中使用 gorm 连接 MySQL

在本文中,我们将介绍如何在 golang 中使用 gorm 这个流行的 ORM 框架来连接 MySQL 数据库,并进行一些基本的增删改查操作。

发布于

在本文中,我们将介绍如何在 golang 中使用 gorm 这个流行的 ORM 框架来连接 MySQL 数据库,并进行一些基本的增删改查操作。gorm 是一个提供了简洁和强大的功能的 ORM 库,它支持多种数据库,包括 MySQL,PostgreSQL,SQLite,Oracle 等。使用 gorm,我们可以方便地将数据库中的表映射为 golang 中的结构体,以及使用 gorm 提供的方法来执行 SQL 语句。

先决条件

在开始之前,我们需要准备以下内容:

  • 一台安装了 MySQL 数据库的服务器,以及一个可以访问的数据库用户和密码。在本文中,我们假设服务器的 IP 地址是 192.168.1.100,端口号是 3306,数据库名是 test,用户名是 root,密码是 123456
  • 一台安装了 golang 的开发环境,以及设置好了 GOPATHGOROOT 环境变量。在本文中,我们假设 golang 的版本是 1.17,并且使用了 go mod 来管理依赖包。
  • 一个可以编写和运行 golang 代码的编辑器或 IDE。在本文中,我们使用的是 Visual Studio Code。

安装 gorm 和驱动

要使用 gorm 来连接 MySQL 数据库,我们需要安装 gorm 本身,以及一个适用于 MySQL 的驱动。在本文中,我们使用的是 mysql,这是一个基于官方的 go-sql-driver/mysql 库的 golang 驱动。要安装 gorm 和 mysql,我们可以在终端中执行以下命令:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

这样,我们就可以在我们的 golang 项目中导入 gorm 和 mysql 了。

连接数据库

要使用 gorm 连接数据库,我们需要先创建一个 gorm.DB 类型的变量,然后调用其 Open 方法,传入驱动名和连接字符串。在本文中,我们的连接字符串是 root:123456@tcp(192.168.1.100:3306)/test,驱动名是 mysql。我们可以在 golang 中这样写:

package main

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

func main() {
    // 创建一个 gorm.DB 类型的变量
    var db *gorm.DB
    // 调用 Open 方法,传入驱动名和连接字符串
    db, err := gorm.Open(mysql.Open("root:123456@tcp(192.168.1.100:3306)/test"), &gorm.Config{})
    // 检查是否有错误
    if err != nil {
        fmt.Println("连接数据库失败:", err)
        return
    }
    // 打印成功信息
    fmt.Println("连接数据库成功")
    // 关闭数据库连接
    defer db.Close()
}

运行这段代码,我们应该可以看到输出:

连接数据库成功

这说明我们已经成功地使用 gorm 连接了 MySQL 数据库。

定义模型

要使用 gorm 对数据库中的表进行操作,我们需要先定义一个与表结构对应的 golang 结构体,这个结构体就是我们的模型。在本文中,我们假设数据库中有一个名为 user 的表,它有两个字段:usernameemail,分别是主键和唯一键。我们可以这样定义我们的模型:

// 定义一个 User 结构体,用来表示 user 表
type User struct {
    // 使用 gorm 标签来指定字段的属性
    Username string `gorm:"primaryKey"` // 主键
    Email    string `gorm:"unique"`     // 唯一键
}

创建表

如果数据库中还没有我们需要的表,我们可以使用 gorm 的 AutoMigrate 方法来自动创建表。这个方法会根据我们的模型来生成对应的 SQL 语句,并执行它。我们可以这样写:

// 使用 AutoMigrate 方法来自动创建表
err = db.AutoMigrate(&User{})
// 检查是否有错误
if err != nil {
    fmt.Println("创建表失败:", err)
    return
}
// 打印成功信息
fmt.Println("创建表成功")

运行这段代码,我们应该可以看到输出:

创建表成功

这说明我们已经成功地使用 gorm 创建了 user 表。

插入数据

要使用 gorm 向表中插入数据,我们可以使用 Create 方法,传入一个模型的实例。这个方法会根据我们的模型来生成对应的 SQL 语句,并执行它。我们可以这样写:

// 创建一个 User 的实例
user := User{
    Username: "bob",
    Email: "[email protected]",
}
// 使用 Create 方法来插入数据
err = db.Create(&user).Error
// 检查是否有错误
if err != nil {
    fmt.Println("插入数据失败:", err)
    return
}
// 打印成功信息
fmt.Println("插入数据成功")

运行这段代码,我们应该可以看到输出:

插入数据成功

这说明我们已经成功地使用 gorm 向 user 表中插入了一条数据。

查询数据

要使用 gorm 从表中查询数据,我们可以使用 FindFirstTakeLast 等方法,传入一个模型的实例或指针,以及一些可选的条件。这些方法会根据我们的模型和条件来生成对应的 SQL 语句,并执行它。我们可以这样写:

// 创建一个 User 的指针
var user *User
// 使用 First 方法来查询第一条数据,传入一个条件
err = db.First(&user, "username = ?", "bob").Error
// 检查是否有错误
if err != nil {
    fmt.Println("查询数据失败:", err)
    return
}
// 打印查询结果
fmt.Println("查询数据成功:", user)

运行这段代码,我们应该可以看到输出:

查询数据成功: &{bob [email protected]}

这说明我们已经成功地使用 gorm 从 user 表中查询了一条数据。

更新数据

要使用 gorm 更新表中的数据,我们可以使用 SaveUpdateUpdates 等方法,传入一个模型的实例或指针,以及一些可选的条件和值。这些方法会根据我们的模型和条件来生成对应的 SQL 语句,并执行它。我们可以这样写:

// 创建一个 User 的实例
user := User{
    Username: "bob",
    Email: "[email protected]",
}
// 使用 Save 方法来更新数据,传入一个条件
err = db.Save(&user).Error
// 检查是否有错误
if err != nil {
    fmt.Println("更新数据失败:", err)
    return
}
// 打印成功信息
fmt.Println("更新数据成功")

运行这段代码,我们应该可以看到输出:

更新数据成功

这说明我们已经成功地使用 gorm 更新了 user 表中的一条数据。

删除数据

要使用 gorm 删除表中的数据,我们可以使用 Delete 方法,传入一个模型的实例或指针,以及一些可选的条件。这个方法会根据我们的模型和条件来生成对应的 SQL 语句,并执行它。我们可以这样写:

// 创建一个 User 的指针
var user *User
// 使用 Delete 方法来删除数据,传入一个条件
err = db.Delete(&user, "username = ?", "bob").Error
// 检查是否有错误
if err != nil {
    fmt.Println("删除数据失败:", err)
    return
}
// 打印成功信息
fmt.Println("删除数据成功")

运行这段代码,我们应该可以看到输出:

删除数据成功

这说明我们已经成功地使用 gorm 删除了 user 表中的一条数据。

总结

在本文中,我们介绍了如何在 golang 中使用 gorm 这个流行的 ORM 框架来连接 MySQL 数据库,并进行一些基本的增删改查操作。我们学习了如何安装 gorm 和驱动,如何连接数据库,如何定义模型,如何创建表,如何插入数据,如何查询数据,如何更新数据,以及如何删除数据。我们还看到了 gorm 是如何根据我们的模型和条件来生成和执行 SQL 语句的。使用 gorm,我们可以方便地将数据库中的表映射为 golang 中的结构体,以及使用 gorm 提供的方法来执行 SQL 语句。