预加载
预加载是一种在查询之前,先将关联的数据从数据库中加载到内存中的方式。在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",这意味着我们希望将每个订单的用户信息也一并查询出来。