我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Gorm 中的 Preload 函数有什么作用?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Gorm 中的 Preload 函数有什么作用?

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Gorm 中的 Preload 函数有什么作用?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

链接http://gorm.io/docs/preload.html讨论了gorm中的预加载,但我无法理解这个函数的作用。

type User struct {
  gorm.Model
  Username string
  Orders Order
}
type Order struct {
  gorm.Model
  UserID uint
  Price float64
}


db.Preload("Username")

db.Preload("Orders").Find(&users)

有人能解释一下这两个语句的作用吗?输出是什么?

难道是用preload来缓存结果的?


解决方案


您提供的链接显示了它的作用。您只需实际阅读页面上的信息即可。

首先,这并没有真正做任何事情:

db.preload("username")

另一方面,以下内容:

db.preload("orders").find(&users)

确实做了一些事情。首先,它填充 users,然后填充 []user.orders。在您链接的页面上的评论中,您会发现这一点,其中显示了它通过查询执行的操作:

db.preload("orders").find(&users)
//// select * from users;
//// select * from orders where user_id in (1,2,3,4);

那么这到底有什么作用呢?我可以为您提供技术答案,您可以通过谷歌搜索热切加载轻松找到该答案,或者我可以通过我认为更简单的示例为您提供答案。

让我通过示例来解释这一点。

假设您有用户,每个用户可以有多个订单。这是一对多的关系,可以这样定义:

type user struct {
  gorm.model
  username string
  orders []order
}

当您填充 users 切片时,如下所示:

db.find(&users)
//// select * from users;

如果您需要获取每个用户的所有订单,您可以轻松访问 user.orders 但无论如何它都是空的,因为它没有被填充。

如果我们像这样填充 users 切片:

db.preload("orders").find(&users)

user.orders 将由该用户的订单填充。这是一个使处理关系变得更容易的抽象。

丑陋的替代方案是:

db.find(&users)

for user := range users {
  db.where("user_id", user.id).find(&user.orders)
}

它还会向数据库发出不必要的更多请求。 (这不好)

如果您的用户有帖子、评论和订单,那么您可以像这样定义和查询它:

type User struct {
  gorm.Model
  Username string
  Orders []Order
  Comments []Comment
  Posts []Post
}

db.Preload("Orders").Preload("Comments").Preload("Posts").Find(&users)

只需上面的代码,您现在就可以访问数据库中不同表中的用户数据。

希望对您有所帮助。

理论要掌握,实操不能落!以上关于《Gorm 中的 Preload 函数有什么作用?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Gorm 中的 Preload 函数有什么作用?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Gorm 中的 Preload 函数有什么作用?

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Gorm 中的 Preload 函数有什么作用?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮
Gorm 中的 Preload 函数有什么作用?
2024-04-04

python中的函数有什么作用

本篇内容介绍了“python中的函数有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、函数的价值主要体现在调用时,而非定义时。调用
2023-06-30

python中函数有什么作用

python中函数有什么作用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、long(长
2023-06-14

pgsql中的nullif函数有什么作用

在 PostgreSQL 中,nullif 函数用于比较两个表达式的值。如果这两个表达式的值相等,则返回 NULL 值;否则返回第一个表达式的值。例如,nullif(5, 5) 将返回 NULL,而 nullif(5, 10) 将返回 5
pgsql中的nullif函数有什么作用
2024-05-14

mysql中的tonumber函数有什么作用

在MySQL中,并没有内置的tonumber函数。通常,MySQL中的数据类型会根据存储的数据自动转换为适当的类型,例如将字符串转换为数字类型。如果您需要将字符串转换为数字类型,可以使用CAST函数或者CONVERT函数来实现。例如:S
mysql中的tonumber函数有什么作用
2024-05-13

oracle中的trim函数有什么作用

在Oracle中,TRIM函数的作用是用来去除字符串开头和结尾的指定字符(默认是空格)。可以指定要去除的字符,也可以不指定,这样就会默认去除空格。TRIM函数通常用于清理数据,去除字符串中多余的空格或其他特殊字符。其语法如下:TRIM([
oracle中的trim函数有什么作用
2024-04-09

php中的mysql_connect函数有什么作用

在PHP中,mysql_connect()函数用于建立与MySQL数据库服务器的连接mysql_connect()函数的语法如下:mysql_connect(hostname, username, password)参数说明:hostn
php中的mysql_connect函数有什么作用
2024-05-13

sql中的distinct函数有什么作用

在 SQL 中,DISTINCT 函数的作用是从查询结果中删除重复的记录,只保留唯一的记录DISTINCT 可以应用于单个列或多个列。以下是一些使用 DISTINCT 的示例:从单个列中删除重复记录:SELECT DISTINCT co
sql中的distinct函数有什么作用
2024-05-14

oracle中dateadd函数有什么作用

在Oracle中,没有内置的DATEADD函数。相反,可以使用ADD_MONTHS、SYSDATE和其他日期函数来进行日期加减操作。ADD_MONTHS函数用于向日期添加指定的月数,而SYSDATE函数用于获取当前日期和时间。其他日期函数如
oracle中dateadd函数有什么作用
2024-05-21

oracle中tonumber函数有什么作用

Oracle中的TO_NUMBER函数用于将一个字符串转换为数字类型。该函数可以将包含数字的字符串转换为相应的数字类型,例如将字符串"123"转换为数字123。如果字符串不能转换为数字类型,TO_NUMBER函数会报错。TO_NUMBER函
oracle中tonumber函数有什么作用
2024-05-22

mysql中distinct函数有什么作用

在MySQL中,DISTINCT 关键字用于从结果集中返回唯一(不同)的值。当你使用 SELECT 语句从一个或多个列中查询数据时,可能会得到重复的行记录。如果你希望每个记录都是独一无二的,即每个记录在结果集中只出现一次,那么就可以使用 D
mysql中distinct函数有什么作用
2024-05-23

python中filter函数有什么作用

在Python中,filter()函数用于过滤序列中的元素,返回一个符合条件的新序列。filter()函数接受两个参数,第一个参数是一个函数(通常是lambda函数),用于对序列中的每个元素进行判断,返回True表示保留该元素,返回Fal
python中filter函数有什么作用
2024-02-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录