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的世界中探索愉快!

目录
相关文章
gorm 一对多关系 以及预加载的用法
gorm 一对多关系 以及预加载的用法
511 0
|
数据库
gorm 事务的使用
gorm 事务的使用
583 0
|
9月前
|
Java
在Java中避免科学计数法的策略
以上方法都提供了在Java中避免科学计数法的有效途径。选择哪种方法取决于具体的应用场景和需求,如需要的精度、性能考虑以及代码的可读性。在处理大数或精度要求较高的数值时,使用 `BigDecimal` 是一个好的选择。对于一般的数值格式化需求,`DecimalFormat` 或 `String.format()` 方法可能更为方便和高效。
484 19
|
SQL 数据库连接 Go
Go语言数据库编程:GORM 的基本使用
GORM 是 Go 语言最流行的 ORM 框架,封装了 database/sql,支持自动迁移、关联关系、事务等功能,开发体验接近高层语言的 ORM。本文介绍了 GORM 的安装与初始化、模型定义、自动迁移、基本 CRUD 操作、条件构造器、钩子函数、事务处理、日志调试等内容,帮助开发者快速掌握其使用方法。
|
12月前
|
分布式计算 算法 安全
Go语言泛型-泛型约束与实践
Go语言中的泛型约束用于限制类型参数的范围,提升类型安全性。通过接口定义约束,可实现对数值类型、排序与比较等操作的支持。开发者既可使用标准库提供的预定义约束,如constraints.Ordered和constraints.Comparable,也可自定义约束以满足特定需求。泛型广泛应用于通用数据结构(如栈、队列)、算法实现(如排序、查找)及构建高效可复用的工具库,使代码更简洁灵活。
|
Go 数据库
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
471 0
|
Shell Linux Ruby
Python3虚拟环境venv
`venv` 是 Python 的虚拟环境工具,用于为不同项目创建独立的运行环境,避免依赖冲突。通过 `python3 -m venv` 命令创建虚拟环境,并使用 `source bin/activate` 激活。激活后,所有 Python 包将安装在该环境中,不影响系统全局环境。退出环境使用 `deactivate` 命令。每个虚拟环境拥有独立的包集合,确保项目间的隔离性。删除虚拟环境只需删除其目录即可。
1689 34
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
2011 7
|
存储 开发框架 Devops
eino — 基于go语言的大模型应用开发框架(一)
Eino 是一个受开源社区优秀LLM应用开发框架(如LangChain和LlamaIndex)启发的Go语言框架,强调简洁性、可扩展性和可靠性。它提供了易于复用的组件、强大的编排框架、简洁明了的API、最佳实践集合及实用的DevOps工具,支持快速构建和部署LLM应用。Eino不仅兼容多种模型库(如OpenAI、Ollama、Ark),还提供详细的官方文档和活跃的社区支持,便于开发者上手使用。
3068 8
|
存储 JSON Go
如何在 Go 项目中隐藏敏感信息,比如避免暴露用户密码?
在Go语言开发中,用户信息管理常涉及敏感数据如密码的处理。为防止这些数据暴露给客户端,本文介绍了三种方法:使用JSON标签忽略字段、自定义序列化逻辑、使用数据传输对象(DTO),以确保用户数据的安全性。通过这些方法,可以有效控制数据输出,避免敏感信息泄露。
476 1