使用 GORM连接数据库,并实现增删改查操作 | 青训营

83 阅读2分钟

使用 GORM连接数据库,并实现增删改查操作

GORM介绍和快速入门

功能概览

  • 全功能ORM(无限接近)
  • 关联(Has One, Has Many, Belongs To, Many To Many, 多态)
  • 钩子函数Hook(在创建/保存/更新/删除/查找之前或之后)
  • 预加载
  • 事务
  • 复合主键
  • SQL 生成器
  • 数据库自动迁移
  • 自定义日志
  • 可扩展性, 可基于 GORM 回调编写插件
  • 所有功能都被测试覆盖
  • 开发者友好

安装

我们都知道,在golang中需要使用一些驱动包来对指定数据库进行操作,比如MySQL需要使用github.com/go-sql-driver/mysql库,而Sqlite需要使用github.com/mattn/go-sqlite3库来支持,不过好在gorm框架中对各个驱动包进行了简单包装,可以让我们在写程序时可以更方便的管理驱动库.

注意:gorm框架只是简单封装了数据库的驱动包,在安装时仍需要下载原始的驱动包

# 这里以MySQL为例
$ go get -u github.com/jinzhu/gorm
$ go get -u github.com/go-sql-driver/mysql

增删改查操作

Gorm操作MySQL的步骤如下:

  1. 先用struct定义一个模型,字段与数据库的字段一致
  2. 使用Gorm连接数据库
  3. 使用Gorm操作数据库
package main
import (
    "fmt"
    "time"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)


// 定义一个数据模型(user表)
type User struct {
    Id          uint        `gorm:"AUTO_INCREMENT"`
    Name        string      `gorm:"size:50"`
    PassWord    string      `gorm:"type:varchar(25)"`
}

var db *gorm.DB

打开数据库连接,通过mysql.Open函数打开连接,该函数需要传递一个dsndsn是连接数据库的一个连接串,相当于Java中的JDBC连接串。

dsn的格式为:{username}:{password}@tcp({host}:{port})/{dbname}?charset=utf8&parseTime=True&loc=Local

func main() {
    db,err := gorm.Open("mysql","username:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        fmt.Errorf("创建数据库连接失败:%v",err)
    }

    defer db.Close()

    // 自动迁移数据结构(table schema)
    db.AutoMigrate(&User{})

    // 插入记录
    db.Create(&User{Name:"jkskj",PassWord:"*************"})

    var user User
    var users []User
    // 查看插入后的全部元素
    fmt.Printf("插入后元素:\n")
    db.Find(&users)
    fmt.Println(users)

    // 查询一条记录
    db.First(&user,"name = ?","jkskj")
    fmt.Println("查看查询记录:",user)

    // 更新记录(基于查出来的数据进行更新)
    db.Model(&user).Update("password","*********************")
    fmt.Println("更新后的记录:",user)

    // 删除记录
    db.Delete(&user)

    // 查看全部记录
    fmt.Println("查看全部记录:")

    db.Find(&users)
    fmt.Println(users)
}