美文网首页
Go 使用 Gorm 操作 MySQL 数据库

Go 使用 Gorm 操作 MySQL 数据库

作者: 张云飞Vir | 来源:发表于2020-03-29 00:50 被阅读0次

    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)
    

    3. 参考

    https://gorm.io/docs/

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

    相关文章

      网友评论

          本文标题:Go 使用 Gorm 操作 MySQL 数据库

          本文链接:https://www.haomeiwen.com/subject/gtaeuhtx.html