栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Gorm Preload()方法——在GoLang中处理MySQL一对多关系

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Gorm Preload()方法——在GoLang中处理MySQL一对多关系

使用Gorm 预加载方法处理一对多关系
  • 高能预警
  • 正文
        • 数据结构体
        • 初始化表 & 创建数据
        • 可视化查看一下
        • 在main函数中加入并执行
        • 控制台输出
        • 后记

高能预警
  • 本文的绝大部分内容来自于 Gorm官方文档,默认读者了解Gorm库
  • 本文基于Gorm v2版本,敬请读者朋友们对应食用~
正文
  • 我们在后台处理数据库一对多的关系时,当然希望“多”的这部分部分数据乖乖的存放在数组中。在Gorm库中已经为我们提供了预加载(Preload()方法)来解决这个问题,本文将带领大家快速上手。请君继续阅读。
数据结构体
  • 这里说明一下,我们使用结构体嵌套的这种方式,并不会对Gorm创建的数据库产生影响,即它不会把下面的Orders []Order解析成字段,更不会自动创建外键(这里可以使用gorm的 标签 来实现更高级的数据库操作),现在想想还是很便捷的。
`源自官网示例`
type User struct {
	Id int
	Username string
	Orders   []Order
}

type Order struct {
	Id int
	UserID uint
	Price  float64
}
初始化表 & 创建数据
func main() {
	// 数据库连接
	dsn := "root:123456@(127.0.0.1:3306)/CSDN?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	// 初始化表
	_ = db.AutoMigrate(User{}, Order{})

	// 创建数据
	_ = CreatUser(db)
	_ = CreatOrder(db)
}

func CreatUser(db *gorm.DB) (err error) {
	err = db.Create(&[]User{
		{Username: "little_A"},
		{Username: "little_B"},
		{Username: "little_C"},
		{Username: "little_D"},
	}).Error
	return
}

func CreatOrder(db *gorm.DB) (err error) {
	err = db.Create(&[]Order{
		{UserID: 1, Price: 1},
		{UserID: 1, Price: 2},
		{UserID: 1, Price: 3},
		{UserID: 1, Price: 4},
		{UserID: 2, Price: 5},
		{UserID: 2, Price: 6},
		{UserID: 2, Price: 7},
		{UserID: 3, Price: 8},
		{UserID: 3, Price: 9},
		{UserID: 4, Price: 10},
	}).Error
	return
}
可视化查看一下


  • 可以看到我们没个user下都对应这一个或多个price,符合一对多的条件。
  • 准备工作就绪后,让我们开始使用Preload()方法。
在main函数中加入并执行
	var a []User
	db.Preload("Orders").Find(&a)
	fmt.Println(a)
控制台输出

  • 可以看到我们是对Users表的查询,Orders表的预加载,一对多的关系一目了然。
后记
  • 本文是博主在处理MySQL一对多关联的理解,当然本文内容是相对基础的,读者们可以根据自己的需求解锁更多高级用法,以上。

感谢阅读。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号