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

135 阅读3分钟

​ 数据库对我们来说是十分重要的,每一个应用型程序都会使用到,学习如何高效去操作数据库实现增删改查操作也是日常开发的重点。在Java语言中,我们通常会使用JDBC、mybatis操作数据库,而今天要介绍的是使用GO语言的GORM框架对数据库进行增删改查操作。

一.GORM简介

​ GORM是一个轻量级的ORM库,旨在连接数据库并实现增删改查操作。它能够让开发者以对象关系映射(ORM)的方式与多种数据库进行交互,包括MySQL、PostgreSQL、SQLite等。在本篇文章中,我们将学习如何使用GORM连接数据库并实现增删改查操作。

二.GORM使用

首先,我们需要在Go项目中使用GORM,要到官网gorm.io/zh_CN/docs/…

go get -u gorm.io/gorm

安装好GORM框架后,需要在Go代码前导入以下包。如果我们使用的是MySQL数据库,直接按照下列代码就好,如果是使用的sqlserver或者其它数据库,则需要在driver驱动后更换成要使用的数据库名称。

import (
    "gorm.io/driver/mysql"  //使用的是MySQL数据库
    "gorm.io/gorm"
)

​ 导入完所需的包后,则需建立数据库连接。在Java语言中,与数据库建立连接有四部分组成,分别是driver、url、username、password,分别代表的是数据库连接驱动(当前使用的是MySQL数据库)、数据库连接地址、数据库用户名、数据库密码,而GORM框架也不例外,也包含这四部分。username是数据库用户名,password是数据库密码,tcp(127.0.0.1:3306)是数据库连接地址(当前是本地的MySQL数据库),database是数据库名称。

func main() {
    // 连接数据库
    dsn := "username:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("无法连接数据库")
    }
    defer db.Close()
}

​ 在GORM中,我们需要定义模型结构来映射数据库表。以用户表(User)为例,有两个字段,分别是姓名(name),邮箱(email),下面是一个用户表的模型结构:

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

​ 我们可以使用 AutoMigrate 方法来创建表和进行迁移,这会根据模型结构自动创建名为users的表。

//创建表和进行迁移
db.AutoMigrate(&User{})
1.新增用户

​ 调用db中Create方法,传入user参数。

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

​ 调用db中First方法,传入user,id两个参数。

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
}
3.更新用户

更新用户分为两步,首先需要调用getUserByID将要更新的用户查询出来,再调用db中Save方法,传入user参数。

func updateUser(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
}
4.删除用户

删除用户调用db中Delete,传入User{}、id两个参数。

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

三.完整示例代码

​ 下列代码主要是对GORM连接数据库实现增删改查操作,包括导包、建立数据库连接、定义模型结构映射数据库表、定义方法对数据库表进行增删改查操作。

package main

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

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

 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()
     // 创建表和进行迁移
    db.AutoMigrate(&User{})
     //创建记录
    createUser(db, "xiaoming", "xiaoming@163.com")
     //查询记录
    user, err := getUserByID(db, 1)
    if err != nil {
        panic(err)
    }
    fmt.Println(user.Name, user.Email)
     // 更新记录
    err = updateUser(db, 1, "xiaoming666@163.com")
    if err != nil {
        panic(err)
    }
     // 删除记录
    err = deleteUser(db, 1)
    if err != nil {
        panic(err)
    }
}
 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 updateUser(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
}