这是我参与「第三届青训营 -后端场」笔记创作活动的的第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 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误
同理,可以得到对应的RUD方法。需要注意的是,执行gorm中的删除方法删除对象时需要指定主键,否则会触发批量删除。而且gorm中的删除是软删除,也就是当要删除某记录时,记录不会从数据库中被真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过普通的查询方法找到该记录。
以上便是go 使用gorm操作mysql数据库的基本操作。
参考内容:gorm.io/zh_CN/