一、GORM 简介
GORM 是一个功能强大的 Go 语言 ORM 库,它支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 SQL Server。GORM 提供了丰富的 API,使得开发者可以轻松地进行数据库操作,而无需编写复杂的 SQL 语句。
二、安装 GORM
首先,我们需要安装 GORM 库。你可以通过以下命令来安装 GORM:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
三、连接数据库
在开始使用 GORM 之前,我们需要先连接到数据库。以下是一个连接到 MySQL 数据库的示例代码:
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "user:password@tcp(127.0.0.1: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")
}
// 连接成功
println("Database connected successfully")
}
在这个示例中,我们使用 mysql.Open 方法来打开一个 MySQL 数据库连接,并通过 gorm.Open 方法来初始化 GORM 实例。
四、定义模型
在使用 GORM 进行数据库操作之前,我们需要定义一个模型。模型是 Go 语言中的结构体,它对应数据库中的表。以下是一个简单的用户模型定义:
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string
CreatedAt time.Time
UpdatedAt time.Time
}
在这个模型中,我们定义了 ID、Name、Email、CreatedAt 和 UpdatedAt 字段。GORM 会自动将这些字段映射到数据库表中的相应列。
五、创建表
在定义好模型之后,我们可以使用 GORM 自动创建数据库表。以下是创建表的示例代码:
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1: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")
}
// 自动迁移模式
db.AutoMigrate(&User{})
}
AutoMigrate 方法会自动创建或更新数据库表,以匹配模型的定义。
六、增删改查操作
1. 创建记录
使用 GORM 创建记录非常简单。以下是创建一条用户记录的示例代码:
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1: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")
}
// 创建记录
user := User{Name: "John Doe", Email: "john.doe@example.com"}
db.Create(&user)
}
2. 查询记录
GORM 提供了多种查询方法,可以满足不同的查询需求。以下是查询所有用户记录的示例代码:
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1: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")
}
// 查询所有用户记录
var users []User
db.Find(&users)
for _, user := range users {
fmt.Println(user.Name, user.Email)
}
}
3. 更新记录
更新记录也非常简单。以下是更新用户记录的示例代码:
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1: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")
}
// 更新记录
var user User
db.First(&user, 1) // 根据主键查询用户
user.Email = "new.email@example.com"
db.Save(&user)
}
4. 删除记录
删除记录同样简单。以下是删除用户记录的示例代码:
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1: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")
}
// 删除记录
var user User
db.First(&user, 1) // 根据主键查询用户
db.Delete(&user)
}