首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go 使用 Gorm 操作 MySQL 数据库

Go 使用 Gorm 操作 MySQL 数据库

作者头像
张云飞Vir
发布2020-04-01 17:34:15
发布2020-04-01 17:34:15
6.7K0
举报
文章被收录于专栏:写代码和思考写代码和思考

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 类库

功能强大:

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

2. 操作 MySQL 数据库

2.1 加载驱动

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

代码语言:javascript
复制
  import (
    _ "github.com/go-sql-driver/mysql"
  )

然后执行 go mod vendor 来同步更新,这时 go mod 会自动更新 go.mod文件和下载依赖包

代码语言:javascript
复制
go mod vendor

2.2 导入 gorm 包

方法同上,导入包即可。

代码语言:javascript
复制
  import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
  )

2.3 打开数据库

调用 gorm.Open 方法打开数据库

代码语言:javascript
复制
  db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
  defer db.Close()

2.4 建表

建表一般采用 数据模型同步的方式,先创建一个 model

代码语言:javascript
复制
  type AccountInfo struct {
    gorm.Model
    Name     string `gorm:"not null;unique"`
    Password string `gorm:"not null;"`
    Status   uint   `gorm:"default:0"`
  }

然后再下面这样,这时数据表会自动建立

代码语言:javascript
复制
    // 自动迁移模式
db.AutoMigrate(&AccountInfo{})

2.5 增删改查

2.5.1 创建记录

代码语言:javascript
复制
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
db.Create(&user)

2.5.2 删除/软删除

代码语言:javascript
复制
db.Delete(&email)

批量删除:

代码语言:javascript
复制
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})

2.5.3 更新

更新整个记录

代码语言:javascript
复制
user.Name = "jinzhu 2"
user.Age = 100
db.Save(&user)

如果只想更新更改的字段,可以使用Update, Updates

代码语言:javascript
复制
  // 更新单个属性
  db.Model(&user).Update("name", "hello")

2.5.4 where 查询

// 获取第一个匹配记录

代码语言:javascript
复制
  db.Where("name = ?", "jinzhu").First(&user)
    //// SELECT * FROM users WHERE name = 'jinzhu' limit 1;

// 获取所有匹配记录

代码语言:javascript
复制
  db.Where("name = ?", "jinzhu").Find(&users)

2.5.5 count

使用 count 查询

代码语言:javascript
复制
db.Table("deleted_users").Count(&count)

3. 参考

https://gorm.io/docs/

http://gorm.book.jasperxu.com/crud.html#q

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 0. 背景
  • 1. 简单介绍
    • 1.1 MySQL 数据库介绍
    • 1.2 Gorm 介绍
  • 2. 操作 MySQL 数据库
    • 2.1 加载驱动
    • 2.2 导入 gorm 包
    • 2.3 打开数据库
    • 2.4 建表
    • 2.5 增删改查
      • 2.5.1 创建记录
      • 2.5.2 删除/软删除
      • 2.5.3 更新
      • 2.5.4 where 查询
      • 2.5.5 count
  • 3. 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档