0. 背景
在实际开发中,要用到数据库存储数据。MySQL是一个关系型数据库管理系统 使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。
1. 简单介绍
1.1 MySQL 数据库介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
1.2 Gorm 介绍
The fantastic ORM library for Golang
Go 语言的 超棒的 ORM 类库
功能强大:
全功能ORM(几乎)
关联(包含一个,包含多个,属于,多对多,多种包含)
Callbacks(创建/保存/更新/删除/查找之前/之后)
预加载(急加载)
事务
复合主键
SQL Builder
自动迁移
日志
可扩展,编写基于GORM回调的插件
每个功能都有测试
开发人员友好
2. 操作 MySQL 数据库
2.1 加载驱动
操作mysql需要 mysql 的驱动,由于我使用 go mod 来管理依赖,直接导入包就行。
import (
_ "github.com/go-sql-driver/mysql"
)
然后执行 go mod vendor 来同步更新,这时 go mod 会自动更新 go.mod文件和下载依赖包
go mod vendor
2.2 导入 gorm 包
方法同上,导入包即可。
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
2.3 打开数据库
调用 gorm.Open 方法打开数据库
db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
defer db.Close()
2.4 建表
建表一般采用 数据模型同步的方式,先创建一个 model
type AccountInfo struct {
gorm.Model
Name string `gorm:"not null;unique"`
Password string `gorm:"not null;"`
Status uint `gorm:"default:0"`
}
然后再下面这样,这时数据表会自动建立
// 自动迁移模式
db.AutoMigrate(&AccountInfo{})
2.5 增删改查
2.5.1 创建记录
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
db.Create(&user)
2.5.2 删除/软删除
db.Delete(&email)
批量删除:
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
2.5.3 更新
更新整个记录
user.Name = "jinzhu 2"
user.Age = 100
db.Save(&user)
如果只想更新更改的字段,可以使用Update, Updates
// 更新单个属性
db.Model(&user).Update("name", "hello")
2.5.4 where 查询
// 获取第一个匹配记录
db.Where("name = ?", "jinzhu").First(&user)
//// SELECT * FROM users WHERE name = 'jinzhu' limit 1;
// 获取所有匹配记录
db.Where("name = ?", "jinzhu").Find(&users)
2.5.5 count
使用 count 查询
db.Table("deleted_users").Count(&count)
网友评论