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的结构体,其中包含三个字段:ID、Name和Age。每个字段都有对应的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语句,可以轻松地完成各种数据库操作。