使用 GORM(Go 的 ORM 库)连接数据库|豆包MarsCode AI刷题

90 阅读3分钟

使用 GORM 连接数据库并实现增删改查操作的实践记录

引言

在 Go 语言的开发中,使用 ORM(对象关系映射)库可以大大简化数据库操作。GORM 是 Go 语言中最流行的 ORM 库之一,提供了简洁的 API 来处理数据库的增删改查操作。本文将记录使用 GORM 连接数据库并实现基本 CRUD(创建、读取、更新、删除)操作的实践过程。

环境准备

1. 安装 Go

确保你的开发环境中已经安装了 Go。可以通过以下命令检查 Go 的安装情况:

go version

2. 创建项目

在你的工作目录中创建一个新的 Go 项目:

mkdir gorm-example
cd gorm-example
go mod init gorm-example

3. 安装 GORM 和数据库驱动

使用 go get 命令安装 GORM 以及所需的数据库驱动(以 MySQL 为例):

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

实现过程

1. 连接数据库

首先,创建一个 main.go 文件,并在其中连接到 MySQL 数据库:

package main

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

func main() {
    // 数据库连接信息
    dsn := "username: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 {
        log.Fatalf("failed to connect database: %v", err)
    }

    log.Println("数据库连接成功")
}

请将 usernamepassworddbname 替换为你的数据库用户名、密码和数据库名。

2. 定义模型

接下来,定义一个模型结构体。例如,我们创建一个 User 结构体来表示用户信息:

type User struct {
    ID       uint   `gorm:"primaryKey"`
    Name     string `gorm:"size:100"`
    Email    string `gorm:"size:100;uniqueIndex"`
    Password string `gorm:"size:100"`
}

3. 创建表

在主函数中,我们可以使用 GORM 的 AutoMigrate 方法自动创建表:

db.AutoMigrate(&User{})

4. 实现 CRUD 操作

接下来,实现增删改查操作。

4.1 创建用户
func createUser(db *gorm.DB, name, email, password string) {
    user := User{Name: name, Email: email, Password: password}
    result := db.Create(&user)
    if result.Error != nil {
        log.Fatalf("创建用户失败: %v", result.Error)
    }
    log.Printf("创建用户成功: %v", user)
}
4.2 查询用户
func getUser(db *gorm.DB, id uint) {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        log.Fatalf("查询用户失败: %v", result.Error)
    }
    log.Printf("查询用户成功: %v", user)
}
4.3 更新用户
func updateUser(db *gorm.DB, id uint, newName string) {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        log.Fatalf("查询用户失败: %v", result.Error)
    }
    user.Name = newName
    db.Save(&user)
    log.Printf("更新用户成功: %v", user)
}
4.4 删除用户
func deleteUser(db *gorm.DB, id uint) {
    result := db.Delete(&User{}, id)
    if result.Error != nil {
        log.Fatalf("删除用户失败: %v", result.Error)
    }
    log.Printf("删除用户成功: ID %v", id)
}

5. 整合代码

将上述所有代码整合到 main 函数中:

func main() {
    dsn := "username: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 {
        log.Fatalf("failed to connect database: %v", err)
    }
    log.Println("数据库连接成功")

    db.AutoMigrate(&User{})

    // 创建用户
    createUser(db, "Alice", "alice@example.com", "password123")

    // 查询用户
    getUser(db, 1)

    // 更新用户
    updateUser(db, 1, "Alice Updated")

    // 删除用户
    deleteUser(db, 1)
}

运行程序

保存文件后,在终端中运行以下命令:

go run main.go

你应该能够看到相应的日志输出,表示增删改查操作的成功与否。

总结与感受

通过 GORM,开发者可以更方便地与数据库进行交互,而不需要编写繁琐的 SQL 语句。感觉比jdbc使用mysql数据库更简单一下,jdbc的会更加繁琐,以及我现在在学校教的jsp中使用的jdbc链接数据库操作也比较麻烦,不如go的好用一些,希望这篇实践记录能对你在 Go 语言开发中使用 GORM 有所帮助!