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

107 阅读3分钟

1 ORM简介

1.1 ORM 初步了解

ORM:Object Relational Mapping(对象 关系 映射)

  • 对象:程序中的对象/示例,例如Go语言中的结构体实例
  • 关系:关系型数据库,例如Mysql

GORM功能:可以用程序中的ORM语句替换对数据库进行操作的Sql语句。

1.2 数据表与结构体的映射关系

Mysql数据与GO语言结构体对应关系:

  • 数据表<——>结构体
  • 数据行<——>结构体实例
  • 字段<——>结构体字段

image.png

1.3 GORM优缺点

  • 优点: 提高开发效率
  • 缺点: 牺牲执行性能 牺牲灵活性 弱化SQL能力

2 GORM连接数据库

2.1 GORM和Mysql安装

安装GORM:

go get -u github.com/jinzhu/gorm

安装Mysql:

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

2.2 GORM连接数据库

使用 gorm.Open 函数连接数据库:

db, err := gorm.Open("mysql", "root:root@(127.0.0.1:3306)/test_tianshuai?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
    panic("Failed to connect to database")
}
defer db.Close()

其中root:root@(127.0.0.1:3306)包含了数据库的用户名、密码、地址和端口信息。

3 创建数据表

3.1 定义结构体

本文采用定义模型来映射数据库中的表。模型可以是一个结构体,根据1.2中介绍的结构体中的字段对应数据库表中的列关系,首先定义一个 UserInfo 结构体来表示用户表:

type UserInfo struct {
    ID     uint
    Name   string
    Gender string
    Hobby  string
}

3.2 结构体转数据表

利用db.AutoMigrate将结构体自动迁移至数据表并进行对应:

db.AutoMigrate(&UserInfo{})

查看数据表结构:

image.png

4 增删改查操作

4.1 增

使用 Create 方法创建一条新的数据:

u1 := UserInfo{1, "小明", "男", "羽毛球"}
db.Create(&u1)

查看数据表:

image.png

4.2 查

使用 First 方法查询数据表中的第一条数据(Find方法可以查询其他数据):

var u UserInfo
db.First(&u)
fmt.Printf("u:%#v\n", u)

输出:

image.png

4.3 改

使用 Update 方法更改数据表中的数据:

db.Model(&u).Update("hobby", "蛙泳")
fmt.Printf("u:%#v\n", u)

查看数据表:

image.png

输出:

image.png

4.4 删

使用 delete 方法删除数据表中的数据:

db.Delete(&u)

查看数据表:

image.png

5 完整实例

以下代码展示了如何使用GORM连接数据库并实现增删改查基本操作:

package main

import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

// UserInfo -->数据表
type UserInfo struct {
    ID     uint
    Name   string
    Gender string
    Hobby  string
}

func main() {
    //连接Mysql数据库
    db, err := gorm.Open("mysql", "root:root@(127.0.0.1:3306)/test_tianshuai?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
       panic("Failed to connect to database")
    }
    defer db.Close()

    //创建表 自动迁移(把结构体和数据表进行对应)
    db.AutoMigrate(&UserInfo{})

    //创建数据行
    u1 := UserInfo{1, "小明", "男", "羽毛球"}
    db.Create(&u1)

    //查询数据
    var u UserInfo
    db.First(&u) //查询表中第一条数据,保存到u
    fmt.Printf("u:%#v\n", u)

    //更新数据
    db.Model(&u).Update("hobby", "蛙泳")
    fmt.Printf("u:%#v\n", u)

    //删除数据
    db.Delete(&u)
}

6 总结

GORM 增删改查的要点:

  1. 定义实体类:首先需要定义一个实体类来映射数据库中的表,实体类中的属性对应表中的字段。
  2. 创建 GORM 对象:通过 gorm.Open() 方法创建一个 GORM 对象,其中需要传入数据库驱动、数据库地址等参数。
  3. 定义映射关系:通过 db.AutoMigrate(&model) 方法将实体类与数据库表进行映射。
  4. 增加数据:通过 db.Create(&model) 方法向数据库中添加一条记录。
  5. 删除数据:通过 db.Delete(&model) 方法从数据库中删除一条记录。
  6. 更新数据:通过 db.Update(&model) 方法更新数据库中的一条记录。
  7. 查询数据:通过 db.Find(&models) 方法从数据库中查询指定条件的记录,其中 models 是一个指向实体类的指针数组。
  8. 分页查询数据:通过 db.Paging(&page, &pageSize).Find(&models) 方法实现分页查询,其中 page 是页码,pageSize 是每页显示的记录数

本文主要参考【GORM简明教程】01 GORM连接MySQL基础示例_哔哩哔哩_bilibili,如有错误欢迎指正!