使用 GORM 连接数据库和实现增删改查操作 | 青训营

70 阅读2分钟

简介

GORM 是 Go 语言中一个强大且易用的 ORM(Object Relational Mapping)库,它能够帮助我们简化与数据库的交互,提高开发效率。在本文中,我们将学习如何使用 GORM 连接数据库,并实现基本的增删改查操作。高级操作可以参考GORM官方文档GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

安装和配置

首先,我们需要安装 GORM 包及其所需的数据库驱动。在命令行中执行以下命令:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql # 假设我们使用 MySQL 数据库

接下来,我们需要在 Go 代码中引入 GORM 包:

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

连接数据库

在开始之前,确保你已经在本地或远程服务器上安装并启动了 MySQL 数据库,并创建了相应的数据库。

接下来,我们将通过 GORM 连接到数据库。在代码中添加以下部分:

func ConnectDB() (*gorm.DB, error) {
    // 替换以下信息为你的 MySQL 连接信息
    dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        return nil, err
    }
    
    return db, nil
}

创建模型

在 GORM 中,模型是与数据库表对应的结构体。我们需要定义模型来表示数据库中的表及其字段。

假设我们创建了一个用户表 users,包含 idnameage 字段,我们可以定义如下模型:

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

在这个例子中,ID 字段被指定为主键,并且 Name 字段不能为空。

数据库迁移

在实际应用中,我们需要将模型映射到数据库表,这一过程称为数据库迁移(Migration)。GORM 提供了自动迁移的功能,可以根据模型自动创建表和字段。

在连接数据库的代码中添加以下部分:

func Migrate(db *gorm.DB) error {
    return db.AutoMigrate(&User{})
}

增删改查操作

现在我们已经连接到了数据库并创建了模型,我们可以开始进行增删改查操作。

创建用户

func CreateUser(db *gorm.DB, name string, age uint) error {
    user := User{
        Name: name,
        Age:  age,
    }

    return db.Create(&user).Error
}

查询用户

func GetUserByID(db *gorm.DB, id uint) (User, error) {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        return User{}, result.Error
    }

    return user, nil
}

更新用户

func UpdateUser(db *gorm.DB, id uint, name string, age uint) error {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        return result.Error
    }

    user.Name = name
    user.Age = age

    return db.Save(&user).Error
}

删除用户

func DeleteUser(db *gorm.DB, id uint) error {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        return result.Error
    }

    return db.Delete(&user).Error
}