使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作(实践)|青训营营

106 阅读3分钟

前言

本章节将介绍go的ORM库——GORM的使用教程,包括链接数据库,并实现增删改查等操作

GORM

什么是ORM

Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库。是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

面向对象,当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。程序员会在自己的业务逻辑代码中夹杂很多 SQL 语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。

ORM 的出现充当了对象和数据库层次的桥梁作用。

什么是GORM?

Golang写的GitHub上活跃度很高的orm库

特点

  • 全功能ORM;
  • 关联(包含一个,包含多个,属于,多对多,多种包含);
  • Callbacks(创建/保存/更新/删除/查找之前/之后);
  • 预加载;
  • 事务
  • 复合主键
  • SQL Builder
  • 自动迁移
  • 日志
  • 可扩展,编写基于GORM回调的插件
  • 每个功能都有测试
  • 开发人员友好

什么是MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database

Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作

步骤1:安装GORM

首先,我们需要安装 GORM 包。在终端中运行以下命令:

go get -u gorm.io/gorm

步骤2:导入所需要的包

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

步骤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("无法连接数据库")
    }
    defer db.Close()
}

请确保替换 user 、 password 和 dbname 为你的实际数据库凭据和名称。

步骤4:定义模型结构

在 GORM 中,我们需要定义模型结构来映射数据库表,我们定义了一个名为 User 的模型,它包含了 Name 和 Email 两个字段。

type User struct {
    gorm.Model
    Name  string
    Email string
}

步骤5:创建表和迁移

在 GORM 中,我们可以使用 AutoMigrate 方法来创建表和进行迁移。在 main 函数中添加以下代码:

func main() {
    // ...
     // 创建表和进行迁移
    db.AutoMigrate(&User{})
}

步骤 6:实现增删改查操作

现在,我们可以使用 GORM 提供的方法来执行增删改查操作。以下是一些示例:

创建记录

func createUser(db *gorm.DB, name, email string) {
    user := User{Name: name, Email: email}
    db.Create(&user)
}

查询记录

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 updateUserEmail(db *gorm.DB, id uint, email string) error {
    user, err := getUserByID(db, id)
    if err != nil {
        return err
    }
    user.Email = email
    result := db.Save(&user)
    return result.Error
}

删除记录

func deleteUser(db *gorm.DB, id uint) error {
    result := db.Delete(&User{}, id)
    return result.Error
}