使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作 | 青训营

61 阅读3分钟

GORM 是 Go 语言中最流行的 ORM(对象关系映射)库之一,它可以让我们用 Go 语言中的结构体和方法来操作数据库中的表和记录,从而简化数据库编程。在本文中,我们将介绍如何使用 GORM 连接不同类型的数据库,并实现基本的增删改查(CRUD)操作。

首先,我们需要安装 GORM 库,以及我们想要使用的数据库驱动。GORM 支持多种数据库,如 MySQL, PostgreSQL, SQLite, SQL Server 等。我们可以使用 go get 命令来安装它们:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql // 如果使用 MySQL
go get -u gorm.io/driver/postgres // 如果使用 PostgreSQL
// 其他数据库驱动请参考官方文档

然后,我们需要定义一个模型,用于映射数据库中的表结构。GORM 会根据结构体的名称和字段来自动创建或迁移表。我们可以使用标签来自定义模型的行为,例如指定字段名、类型、约束等。例如,我们可以定义一个 User 模型如下:

type User struct {
  ID uint `gorm:"primaryKey"` // 主键
  Name string `gorm:"size:64;not null"` // 名称,长度为64,不能为空
  Age int `gorm:"default:18"` // 年龄,默认为18
  Email string `gorm:"uniqueIndex"` // 邮箱,唯一索引
}

接下来,我们需要创建一个数据库连接,并传递给 GORM。GORM 提供了一个通用的 Open 函数,用于连接不同类型的数据库。我们需要根据数据库的类型和配置,传递相应的驱动和参数。例如,如果我们使用 MySQL 数据库,我们可以这样写:

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

dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" // 数据库连接字符串
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // 创建数据库连接
if err != nil {
  panic("failed to connect database")
}

有了数据库连接后,我们就可以使用 GORM 来进行 CRUD 操作了。GORM 提供了一系列的方法来实现这些操作,例如:

  • Create: 创建记录,可以传入单个或多个模型实例。
  • First: 查询第一条匹配条件的记录,如果没有找到,则返回错误。
  • Find: 查询所有匹配条件的记录,可以传入切片或者指针来接收结果。
  • Save: 更新记录,会更新所有字段,即使字段没有变化。
  • Update: 更新记录,只会更新非零值字段。
  • Delete: 删除记录,可以传入主键或者条件。

以下是一些示例代码:

// 创建记录
user1 := User{Name: "Alice", Age: 20, Email: "alice@example.com"}
user2 := User{Name: "Bob", Age: 25, Email: "bob@example.com"}
db.Create(&user1) // 创建单个记录
db.Create([]User{user1, user2}) // 创建多个记录

// 查询记录
var user User
var users []User
db.First(&user) // 查询第一条记录
db.First(&user, 1) // 查询主键为1的记录
db.First(&user, "name = ?", "Alice") // 查询名称为Alice的记录
db.Find(&users) // 查询所有记录
db.Find(&users, "age > ?", 18) // 查询年龄大于18的记录

// 更新记录
user.Name = "Alice Smith"
user.Age = 21
db.Save(&user) // 更新所有字段
db.Model(&user).Update("name", "Alice Smith") // 更新单个字段
db.Model(&user).Updates(User{Name: "Alice Smith", Age: 21}) // 更新多个字段
db.Model(&user).Updates(map[string]interface{}{"name": "Alice Smith", "age": 21}) // 更新多个字段

// 删除记录
db.Delete(&user) // 删除单个记录
db.Delete(&user, 1) // 删除主键为1的记录
db.Delete(&user, "name = ?", "Alice") // 删除名称为Alice的记录

以上就是使用 GORM 连接数据库,并实现增删改查操作的基本方法。GORM 还提供了许多其他的功能和特性,如关联、预加载、事务、钩子等,可以让我们更方便地操作数据库。