GORM基础使用 | 青训营笔记

250 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

课前资料

课程PPT:设计模式之 database sql与 GORM实践.pdf - 飞书云文档 (feishu.cn)

GORM简介

是当今比较热门的 golang 的orm操作数据库的工具,使用上主要是把 struct 类和数据库表进行映射,操作数据库时无需手写 sql。本质就是提供一组函数来帮助我们快速拼接 sql 语句,尽量减少 sql 的编写。 Github 地址:github.com/go-gorm/gor…

GORM安装

  • mysql驱动包 ​// mysql 驱动go get -u gorm.io/driver/mysql
  • gorm包 ​// gormgo get -u gorm.io/gorm
  • 基本操作
  1. 使用 struct 定义模型,主要在 golang 中表示 mysql 的表
  2. gorm 创建数据库连接
  3. gorm 操作数据库

定义结构体

结构体

gorm默认使用 snake case,即 struct 中定义的变量名会自动识别成数据库表中下划线的列字段,比如说 CreateTime 就会被识别成数据表中的 create_time 列,所以需要在后面加上gorm:"column:createtime",gorm:"-"表示可以忽略该字段不参与数据表读写

// User 用户表
type User struct {
  ID int64
  Username string `gorm:"column:username"`
  Password string `gorm:"column:password"`
  // 时间戳
  CreateTime int64 `gorm:"column:createtime"`
}

连接MySQL

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

func main() {
  db, err := gorm.Open("mysql", "user:password@(localhost)/dbname?charset=utf8mb4&parseTime=True&loc=Local")
  defer db.Close()
}

GORM操作MySQL

新增数据:

type User struct {
  gorm.Model
  ID     int            `gorm:"primary_key"`
  Name   string         `gorm:"not_null"`
}

func add() {
  user := &User{Name:"David"}
  db.Create(user)
}

删除数据

user := &User{ID:1}
db.Delete(user)

更新数据:

user := &User{ID:1} 
db.Model(user).Update("Name","lisi")

查询数据:

//查询所有条目 var users []User
db.Find(&users) 
fmt.Println(users)  
//查询ID为1的条目 
user := new (User) 
db.First(user,1)
fmt.Println(user)

预加载

gorm 因为性能问题不会加载关联属性,可以通过 Preload 函数支持预加载

// 订单表
type Orders struct {
  gorm.Model
  // 外键
  UserID uint
  Price float64
}
// 用户表
type User struct {
  gorm.Model
  Username string
  // 关联订单,一对多关联关系
  Orders []Orders
}

// 预加载 Orders 字段值,Orders 字段是 User 的关联字段
db.Preload("Orders").Find(&users)

// 通过 Set 设置 gorm:auto_preload 属性,开启自动预加载,查询的时候才会自动完成关联查询
db.Set("gorm:auto_preload", true).Find(&users)