GORM v2 关联预加载Preload和Joins的区别

简介: GORM v2 关联预加载Preload和Joins的区别

前言


本文中使用到的数据表结构以及GORM版本的区分详见以下文章:GORM v2 一对一关联查询使用(Belongs To 、Has One)

执行区别


调用gorm的Debug方法打印一下一对一关联时SQL语句执行过程。

Preload执行过程


执行代码


db.Debug().Preload("Info").First(&student)

执行结果


从图中可以看出,gorm执行了两条SQL来获取主副表数据

image.png

SELECT * FROM `students` ORDER BY `students`.`id` LIMIT 1
SELECT * FROM `information` WHERE `information`.`student_id` = 1

Joins执行过程


执行代码


db.Debug().Joins("Info").First(&student)

执行结果


从图中可以看出,使用Joins后,只执行一条SQL语句就获得了结果

image.png

SELECT `students`.`id`,`students`.`name`,`Info`.`id` AS `Info__id`,`Info`.`student_id` AS `Info__student_id`,`Info`.`sex` AS `Info__sex`,`Info`.`age` AS `Info__age`,`Info`.`hometown` AS `Info__hometown` FROM `students` LEFT JOIN `information` `Info` ON `students`.`id` = `Info`.`student_id` WHERE `students`.`id` = 1 ORDER BY `students`.`id` LIMIT 1

结果


两种预加载的差别:

  • Preload会分开多条SQL语句来执行获取结果
  • Joins会使用left join一条SQL语句直接获取到结果
  • 另外,需要注意的是:Joins只能用于一对一关联中,即HasOne和BelongTo关联
目录
相关文章
gorm 一对多关系 以及预加载的用法
gorm 一对多关系 以及预加载的用法
329 0
|
人工智能 自然语言处理 开发者
Copilot的基本原理
【2月更文挑战第13天】Copilot的基本原理
713 3
Copilot的基本原理
|
中间件 Go 数据库
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
|
Go
终极对决:Go语言make和new完整比较
终极对决:Go语言make和new完整比较
1440 0
|
存储 SQL 安全
Golang底层原理剖析之上下文Context
Golang底层原理剖析之上下文Context
264 0
|
索引 存储 数据库
数据库设计规范
基于阿里数据库设计规范扩展而来
49230 4
|
存储 关系型数据库 MySQL
MySQL中varchar的最大长度是多少
MySQL中varchar的最大长度是多少
1142 0
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
56018 0
|
Go 数据库
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
240 0
|
编译器 Go API
go generate指南:代码自动生成
go generate指南:代码自动生成
3613 0