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关联
目录
相关文章
|
7月前
gorm 一对多关系 以及预加载的用法
gorm 一对多关系 以及预加载的用法
127 0
|
7月前
|
小程序 数据库
小程序连表查询(lookup
该文介绍了小程序实现连表查询的步骤。首先展示效果图,然后通过创建数据库表和云函数来完成连表查询,其中云函数使用了`aggregate`、`match`、`lookup`方法连接'zuowei'和'eara'表。接着,将云函数部署并调用,通过`wx.cloud.callFunction`获取查询结果。最后提醒读者点赞并邀请访问作者个人网站。
109 2
|
SQL 关系型数据库
【笔记】开发指南—DQL语句—Grouping Sets、Rollup和Cube扩展
在关系型数据库中,通常需要使用多个SELECT + UNION语句来实现按照多组维度的结果分组,PolarDB-X新增支持通过Grouping Sets、Rollup和Cube扩展来实现这一目的。此外,PolarDB-X还支持在SELECT命令或HAVING子句中使用GROUPING函数和GROUPING_ID函数,来帮助解释使用上述扩展时的结果。本文将介绍相关语法和示例。
116 0
【TP5】一个表里边有多个关联怎么使用预加载
【TP5】一个表里边有多个关联怎么使用预加载
97 0
【TP5】一个表里边有多个关联怎么使用预加载
【TP5.1】关联与载入 多表连查
【TP5.1】关联与载入 多表连查
253 0
【TP5.1】关联与载入 多表连查
|
SQL 索引
开发指南—DAL语句—CHECK GLOBAL INDEX
您可以使用CHECK GLOBAL INDEX语句检查主表和索引表的数据是否完全一致,并修订不一致的数据。
113 0
|
SQL 关系型数据库 Linux
开发指南—DQL语句—Grouping Sets、Rollup和Cube扩展
在关系型数据库中,通常需要使用多个SELECT + UNION语句来实现按照多组维度的结果分组,PolarDB-X新增支持通过Grouping Sets、Rollup和Cube扩展来实现这一目的。此外,PolarDB-X还支持在SELECT命令或HAVING子句中使用GROUPING函数和GROUPING_ID函数,来帮助解释使用上述扩展时的结果。本文将介绍相关语法和示例。
144 0

热门文章

最新文章