Gorm 新手使用 |青训营

34 阅读4分钟

Gorm 使用手册

一、

Gorm是一个轻量级的Go语言ORM库,它基于Go的反射机制,使得操作数据库非常方便和灵活。Gorm支持多种数据库,包括MySQL、PostgreSQL、SQLite等。

二、安装

首先,需要安装Gorm。可以使用Go的包管理器go get来安装最新版本的Gorm:

go get -u gorm.io/gorm

三、连接数据库

要连接数据库,需要使用Gorm的Open方法。下面是一个连接MySQL数据库的示例:

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

dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}

在这个例子中,我们使用了mysql包提供的MySQL驱动,并创建了一个连接字符串(dsn)。然后,我们使用gorm.Open方法打开数据库连接。

四、定义模型

在Gorm中,需要定义一个结构体来表示数据库表。结构体的字段对应数据库表的列。例如,下面是一个表示用户的模型:

type User struct {
    ID   uint   `gorm:"primarykey"`
    Name string `gorm:"not null"`
    Age  uint   `gorm:"not null"`
}

在这个例子中,我们定义了一个名为User的结构体,其中包含三个字段:IDNameAge。每个字段都有对应的Gorm标签,用于描述该字段的属性。例如,primarykey表示该字段是主键,not null表示该字段不能为空。

五、数据库操作

以下是Gorm支持的一些常见数据库操作:

5.1 创建记录

使用Create方法可以创建新的记录。下面是一个创建用户的示例:

db.Create(&User{Name: "John", Age: 25})

5.2 查询记录

使用Find方法可以查询多个记录。下面是一个查询所有用户的示例:

var users []User
db.Find(&users)

使用First方法可以查询单个记录。下面是一个根据条件查询第一个用户的示例:

var user User
db.First(&user, 1) // 查询ID为1的用户

使用Where方法可以添加查询条件。下面是一个查询年龄大于20岁的用户的示例:

var users []User
db.Where("age > ?", 20).Find(&users)

5.3 更新记录

使用Updates方法可以更新记录。下面是一个更新用户信息的示例:

user := User{Name: "Jane", Age: 30} // 假设ID为1的用户需要更新信息
db.Model(&user).Update(user)

5.4 删除记录

使用Delete方法可以删除记录。下面是一个删除ID为1的用户的示例:

db.Model(&User{}).Where("id = ?", 1).Delete(&User{})

六、关联查询

Gorm支持通过内联、联接和子查询等方式进行关联查询。

6.1 内联查询

内联查询允许你在查询一个模型时,同时获取其关联模型的记录。例如,查询用户及其关联的角色:

var user User
var role Role
db.Select("user.*, role.*").Find(&user, &role)

6.2 联接查询

联接查询允许你在两个模型之间建立关联关系,并在查询时获取它们的相关数据。例如,查询用户及其关联的角色:

var users []User
db.Preload("Role").Find(&users)

在上述代码中,我们使用Preload方法预加载用户的关联角色,然后在进行查询时获取相关数据。

6.3 子查询

子查询允许你在一个查询中使用另一个查询的结果作为条件。例如,查询某个角色下的所有用户:

var role Role
db.First(&role)
var users []User
db.Where("role_id = ?", role.ID).Find(&users)

在上述代码中,我们首先使用First方法查询第一个角色,然后使用子查询获取该角色下的所有用户。

七、事务处理

Gorm支持事务处理,可以在一个事务中执行多个数据库操作。例如,使用Transaction方法执行一个事务:

db.Transaction(func(tx *gorm.DB) error {
    // 创建记录
    user := User{Name: "John", Age: 25}
    tx.Create(&user)

    // 更新记录
    user.Name = "Jane"
    tx.Save(&user)

    // 查询记录
    var users []User
    tx.Where("age > ?", 20).Find(&users)
    // ...

    return nil // 返回nil表示事务成功执行,否则返回错误信息
})

在上述代码中,我们使用Transaction方法包装了一个函数,该函数中包含了多个数据库操作。这些操作将在一个事务中执行,如果执行过程中出现任何错误,事务将回滚并返回错误信息。如果函数返回nil,则表示事务成功执行。

Gorm是一个功能强大的Go语言ORM库,它提供了简单而灵活的数据库操作接口。通过定义模型、使用Gorm提供的API以及结合SQL语句,可以轻松地完成各种数据库操作。