GORM的基本使用 | 豆包MarsCode AI刷题

90 阅读3分钟

一、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
}

在这个模型中,我们定义了 IDNameEmailCreatedAtUpdatedAt 字段。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)
}