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