Gorm使用教程:掌握高级查询的技巧。

简介: 以上就是我们今天的旅程中所会遇到的一些有趣的Gorm查询技巧。学习这些技巧像是学着驾驶一辆全新的巴士,只要你掌握了这些,你可以在数据库的海洋中自由驾驶,轻松地转向,畅游其中。祝你在Gorm的世界中探索愉快!

来吧,朋友们,拉紧我们的安全带,之后的旅程我们要一起学习如何利用Gorm来执行一些高级的查询操作。

首先,Gorm能为你在Go语言中解决什么实际问题呢?它就像是一辆豪华的巴士,它能帮你载着你的数据从数据库站点来回穿梭。Gorm会让你的数据库操作更加简单、直观,这就像是你拥有了一把让你在Go语言与数据库之间自由航行的钥匙。

1. Preload预加载

我们旅途的第一站,就是让我们熟悉一下Preload。假设你是一个图书馆管理员,在图书馆的数据库中,Book表关联了 Author表,每本书都有一个或者多个作者。假设我们想通过书籍来查询相关的作者,我们就需要使用到Gorm的预加载。

这就像是,你把所有感兴趣的书籍拿在手里,然后你想知道这些书的作者是谁。你不需要一个个去查找,只需要使用Gorm的Preload函数:

db.Preload("Authors").Find(&books)
​

这样就把拿在手里的所有书对应的作者也都查到手了。是不是特别方便呢?

2. Joins联接

下一站,我们要赶往的是Joins。有时,我们不仅仅关心本身的数据,还关心与之关联的数据。就像是你想知道特定的书是由哪些作者写的,你就需要用到Joins。

Joins像是一个中转站,将你所需要的各个数据站点连接起来。以下的示例就像是你要从“书”这个站点前往“作者”站点,而Joins就是你的巴士或地铁:

db.Joins("Author").Find(&book)
​

3. Select选择和Scan扫描

到了Select 和 Scan这两个站,他们让你能选择你想要的数据,还可以将数据扫描到你制定的类型的变量中。

Select就像是有人堆放了很多的书籍在你面前,而你只关心其中的某一部分。而这些书籍中包含了许多细节,比如作者、页数、出版日期等。但是你只关心书籍的标题和作者,你就需要用到Select:

db.Select("Title", "Author").Find(&books)
​

Scan, 则像手中的扫描器,扫描后你可以知道书籍的细节信息,比如页数。然后将这个数据扫描到你的页数变量里,像摘取了书籍的精髓:

var pages int
db.Table("books").Select("sum(pages)").Scan(&pages)
​

4. Raw和Exec执行原生SQL

终点站,我们来到了Raw和Exec站。这两个函数让你能够在Go语言中执行原生的SQL代码。

他们的作用就像是,你已经戴上了潜水装备,想要直接跳入数据的海洋。不再经过任何中介,直接和数据库对话:

db.Raw("SELECT title, author FROM books WHERE author = ?", author).Scan(&books)
​

以上就是我们今天的旅程中所会遇到的一些有趣的Gorm查询技巧。学习这些技巧像是学着驾驶一辆全新的巴士,只要你掌握了这些,你可以在数据库的海洋中自由驾驶,轻松地转向,畅游其中。祝你在Gorm的世界中探索愉快!

目录
相关文章
|
22天前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
98 32
|
22天前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
77 23
|
22天前
|
Java 应用服务中间件
多项目分接口:在同一Tomcat下使用不同的端口号访问不同的项目。
总而言之,要在同一Tomcat服务器下使用不同端口访问不同项目,关键是通过对server.xml文件的配置创建多个 `<Service>`实例和相应的虚拟主机。这种方法既实现了项目隔离,也有助于优化资源利用率。通过遵循本文的详细说明,很容易地就能满足需求实现多项目分接口。
87 38
|
22天前
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
73 35
|
10天前
|
人工智能 Cloud Native 数据管理
邀您参加 KubeCon China 2025 分论坛 | 阿里云 AI 基础设施技术沙龙
KubeCon + CloudNativeCon China 2025 将于6月10-11日在香港合和酒店举办,由CNCF与Linux基金会联合主办。阿里云开发者将在大会上分享多个技术议题,涵盖AI模型分发、Argo工作流、Fluid数据管理等领域。大会前还有阿里云AI基础设施技术沙龙,聚焦AI基础设施及云原生技术实战经验。欢迎扫码报名参与!
224 64
|
10天前
|
人工智能 监控 数据挖掘
6/14 上海,Apache Doris x 阿里云 SelectDB AI 主题线下 Meetup 正式开启报名!
6 月 14 日,由 Apache Doris 社区、飞轮科技、阿里云联合发起的湖仓数智融合、AI 洞见未来:Apache Doris x 阿里云 SelectDB 联合 Meetup 将在上海·汇付天下总部大楼正式开启,邀您一同探索 AI 与数据分析的融合实践!
196 76
|
15天前
|
Ubuntu 安全 数据安全/隐私保护
如何在Ubuntu系统下取消sudo的密码输入限制
以上就是如何在Ubuntu系统下取消sudo的密码输入限制的全部内容。探索的旅程是充满乐趣和挑战的,期待下一次与你的相遇,我们将开始新的知识冒险!
82 31
|
10天前
|
缓存
📣阿里云百炼大语言模型618限量资源包活动来袭
阿里云百炼推出大语言模型推理资源包优惠活动,所有主账号用户均可参与,无论是否完成实名认证。活动提供qwen-max、qwen-plus及qwen-turbo三种资源包,分别支持对应模型的实时推理费用抵扣,折扣力度达8.8折至9折不等。每种资源包限量发售,有效期为1年,自订购之日起计算。活动期间购买的资源包不可用于抵扣Batch调用、上下文缓存等其他服务费用。如有疑问可加入官方支持群(77600022533)交流反馈,优惠名额有限,先到先得。
|
13天前
|
安全
区分ConnectTimeout错误和ConnectionError异常在使用中的不同。
总结一下,这两个问题就像是你试图拨打一个电话。ConnectTimeout错误就好比你拨通了电话,但另一端没有接听;ConnectionError异常则好比你的电话根本没法拨出去,或者你拨错了号码——甚至是你根本就没拿到电话。所以,在下一次遇到类似问题的时候,希望你能想起这个比喻,然后灵活应对。
96 34