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

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查询技巧

posted @ 2025-06-17 10:57  yijg9998  阅读(47)  评论(0)    收藏  举报