GORM实践 | 青训营笔记

226 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

1.背景

在实际开发中,要用到数据库存储数据。MySQL就是一个关系型数据库管理系统,它的使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。而gorm就是这么一个类库。

2.介绍

2.1 mysql数据库介绍

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

2.2 Gorm介绍

“设计简洁、功能强大、自由扩展的全功能ORM”

设计原则:API精简、测试有限、最小惊讶、灵活扩展、无依赖、可信赖

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

3.Gorm操作数据库

3.1加载驱动

操作mysql需要 mysql 的驱动,由于我使用 go mod 来管理依赖,直接导入包就行。

  import (
    _ "github.com/go-sql-driver/mysql"
  )

3.2导入gorm包

方法同上,导入包

  import (
    _ "github.com/go-sql-driver/mysql"
    "gorm.io/gorm"
  )

3.3 连接数据库

其中username和password替换成自己mysql数据库的名字和密码

var (
    mysqlUrl = "username:password@tcp(127.0.0.1:3306)/douyin?charset=utf8mb4&parseTime=true&loc=Local"
    DB       *gorm.DB
)
DB, err = gorm.Open(mysql.Open(mysqlUrl), &gorm.Config{
        PrepareStmt: true,
    })
    if err != nil {
        return err
    }
​
​

3.4 建表

如下先创建一个struct

type Remark struct {
    Id              int64       `gorm:"column:comment_id"`          //评论id
    VideoId         int64       `gorm:"column:video_id"`            //视频id
    UserId          int64       `gorm:"column:user_id"`             //发出该评论的用户id
    ActionType      int32       `gorm:"column:action_type"`         //1-发布评论,2-删除评论
    CommentText     string      `gorm:"column:comment_text"`        //用户填写的评论内容
    CreateTime      time.Time   `gorm:"column:create_time"`         //评论时间
}

3.5 基本用法-CRUD

DB.Create(&remark)//添加记录
DB.Delete(&remark)//删除 软删除
DB.Save(&remark)//更新

如上为最简单的CRUD,其实gorm中的where查询也很容易实现

//获得第一个匹配记录
DB.Table("remark").Where("ID",id).First(&remark)

这句语句的意思是在remark表格中查找当ID为id时的记录。

GORM 提供了 FirstTakeLast 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误

同理,可以得到对应的RUD方法。需要注意的是,执行gorm中的删除方法删除对象时需要指定主键,否则会触发批量删除。而且gorm中的删除是软删除,也就是当要删除某记录时,记录不会从数据库中被真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过普通的查询方法找到该记录。

以上便是go 使用gorm操作mysql数据库的基本操作。

参考内容:gorm.io/zh_CN/