Gorm-预加载

2023-04-24 20:07:13 浏览数 (1)

预加载

预加载是一种在查询之前,先将关联的数据从数据库中加载到内存中的方式。在Gorm中,可以使用Preload方法进行预加载。

假设我们有两个表,一个是users表,另一个是orders表。每个用户可以拥有多个订单。我们希望查询所有的订单信息,并将每个订单的用户信息也一并查询出来。这时就可以使用Preload方法进行预加载。

下面是一个使用Preload方法进行预加载的示例:

代码语言:javascript复制
package main

import (
    "fmt"

    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type User struct {
    ID       uint
    Name     string
    Email    string
    Password string
}

type Order struct {
    ID         uint
    OrderNo    string
    Amount     float64
    UserID     uint
    User       User
}

func main() {
    dsn := "user:password@tcp(host:port)/database"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    defer db.Close()

    var orders []Order
    db.Preload("User").Find(&orders)

    for _, order := range orders {
        fmt.Printf("Order: %s - %.2fn", order.OrderNo, order.Amount)
        fmt.Printf("  User: %s - %sn", order.User.Name, order.User.Email)
    }
}

在这个示例中,我们定义了两个结构体User和Order,分别对应数据库中的users表和orders表。我们使用Preload方法对Orders进行查询,并将每个订单的User信息也一并查询出来。最后,我们遍历所有的订单和用户,并打印它们的信息。

在Preload方法中,我们需要传入一个参数,该参数是关联的表名或字段名。在这个示例中,我们传入了"User",这意味着我们希望将每个订单的用户信息也一并查询出来。

go

0 人点赞