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关联
目录
相关文章
|
存储 关系型数据库 MySQL
开源PolarDB- X|替换Opengemini时序数据场景下产品力校验
本文作者:黄周霖,数据库技术专家,就职于南京北路智控股份有限公司,负责数据库运维及大数据开发。
|
编译器 Go API
go generate指南:代码自动生成
go generate指南:代码自动生成
4356 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的驾校管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的驾校管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
179 0
|
存储 监控 容灾
微信技术总监谈架构:微信之道——大道至简(演讲全文)
在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背后的秘密。 周颢把微信的成功归结于腾讯式的“三位一体”策略:即产品精准、项目敏捷、技术支撑。微信的成功是在三个方面的结合比较好,能够超出绝大多数同行或对手,使得微信走到比较前的位置。所谓产品精准,通俗的讲就是在恰当的时机做了恰当的事,推出了重量级功能,在合适的时间以最符合大家需求的方式推出去。他认为在整个微信的成功中,产品精准占了很大一部分权重。
580 2
微信技术总监谈架构:微信之道——大道至简(演讲全文)
|
消息中间件 设计模式 Java
聊聊 Kafka: Consumer 源码解析之 Rebalance 机制
聊聊 Kafka: Consumer 源码解析之 Rebalance 机制
1021 0
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
487 5
|
安全 数据管理 PHP
详尽解析:如何在 Laravel 中实现软删除
【8月更文挑战第31天】
637 0
|
SQL Go
【golang】gorm 中的Where 子句踩坑(实际项目)
【golang】gorm 中的Where 子句踩坑(实际项目)
1128 0
|
NoSQL Redis
redis cluster 手动切换主从
redis cluster 手动切换主从
388 1
|
存储 关系型数据库 MySQL
深入浅出MySQL MRR(Multi-Range Read)
在探索数据库优化的广阔领域中,我们不可避免地会遇到一系列独特的概念和技术。其中之一就是MySQL的多范围读取(Multi-Range Read, MRR)
1018 0
深入浅出MySQL MRR(Multi-Range Read)

热门文章

最新文章