使用GORM连接数据库,并实现增删改查| 青训营

93 阅读3分钟

这是一篇后端的实践文章,具体内容是使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作,最终把实现的过程整理成了本文,写的有问题的地方或者不足之处还请大家指出,非常感谢!

一、GORM介绍

1.1 GORM的简要介绍

GORM(Go Object-Relational Mapping)是Go语言的一个ORM(Object Relational Mapping)库,我们可以通过Go语言对数据库中的数据进行操作,简化了数据库操作的过程。

1.2 GORM的使用

(1)在数据库(如MySQL)中创建Schema;

(2)使用GORM将Go结构体映射到数据库表;

(3)只需操作结构体即可,GORM会自动将其转换为对应的SQL命令实现对数据库中数据的操作;

(4)还可以直接用GORM的API构造SQL来实现数据库的查询操作

1.3 安装操作

安装的代码如下

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

1.4 导入需要使用的包

(1)gorm核心库

该包提供了GORM的核心功能以及API,使用的代码如下:

import "gorm.io/gorm"

(2)数据库驱动

该包提供了GORM和MySQL的交互,代码如下

import "gorm.io/driver/mysql"

以上两个包是使用GORM连接数据库是需要用到的包,GORM支持MySQL、sqlserver等数据库。

二、模型定义

需要先定义一个模型实现数据库表的映射。

若项目中含有vedio模型,需要使用GORM 提供的 gorm.Model 结构体,该结构体中含有通用的数据库字段,如 IDCreatedAtDeletedAt。代码展示如下:

package models

import "gorm.io/gorm"

type Video struct {
    gorm.Model
    Title       string
    Description string
    URL         string
}

三、与数据库连接

首先需要安装号 GORM ,以及相应的数据库驱动。

本次实验使用的是 GORM v2+ 版本,使用的数据库是MySQL 的8.0 版本,二者相连接的代码如下:

package main

import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "your-app/models"
)

func main() {

    dsn := "username:password@tcp(127.0.0.1:336)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("Failed to connect to database")
    }

    db.AutoMigrate(&models.Video{})
}

四、实现增删改查

创建

func CreateVideo(db *gorm.DB, video *models.Video) error {
    result := db.Create(video)
    return result.Error
}

删除数据

func DeleteVideo(db *gorm.DB, video *models.Video) error {
    result := db.Delete(video)
    return result.Error
}

修改数据

func UpdateVideo(db *gorm.DB, video *models.Video) error {
    result := db.Save(video)
    return result.Error
}

查找数据

func GetVideoByID(db *gorm.DB, id uint) (*models.Video, error) {
    var video models.Video
    result := db.First(&video, id)
    return &video, result.Error
}

五、 遇到的问题及解决方法

(1)版本不兼容

当 GORM 或 MySQL 升级到新版本时,容易出现库版本不兼容的问题,因此使用建议的组合版本会减少不兼容的情况发生

(2)数据完整性问题

GORM 对于输入的数据不去验证数据库的完整性规则,因此可能会在数据库中出现错误数据,因此可以考虑添加数据库级别的约束条件来确保数据的完整性不出现问题,此外,还可以添加数据验证操作,以保证保存在数据库中的数据时有效的

(3)并发问题

可能有多个访问数据库的请求同时出现,这可能导致数据库中含有脏数据,引起数据一致性的问题,因此要使用事务的概念,以确保操作的原子性。

总结:

在实现本次实验时,体会到了理论知识和切身实践的差距,以为自己课程听懂了,但是实践的时候,总是会遇到各种各样的问题,就比如说版本不兼容的问题,我相信这是在平时的学习过程中大部分同学都可能会遇到的问题,网上的资料一大堆,但是真正实践后有用的却不见得有多少;还有例如对数据的不正确操作导致的数据完整性问题等情况,这些就需要我们多掌握理论知识,并且在实践中时刻谨记,这样才能尽量的避免这种问题的出现,总之,既要有充分的理论基础,又要有实际的动手实践能力。