1.通过Preload解决N+1问题
1.1.定义模型
// 定义订单模型,订单包含一个用户模型
type Order struct {
ID uint
UserID uint
User User // 关联的用户信息
Amount float64
Currency string
CreatedAt time.Time
}
// 定义用户模型
type User struct {
ID uint
Name string
Email string
}
1.2.Preload查询
// 保存订单列表
var orders []Order
// 预加载User模型,这里不会通过订单查询出所有的用户ID,然后循环一个个的去查询用户信息,而是通过合并SQL一起查询
err := db.Preload("User").Find(&orders).Error