高能预警
  • 本文的绝大部分内容来自于 Gorm官方文档,默认读者了解Gorm库
  • 本文基于Gorm v2版本,敬请读者朋友们对应食用~
正文

数据结构体

`源自官网示例`
type User struct {
	Id int
	Username string
	Orders   []Order
}

type Order struct {
	Id int
	UserID uint
	Price  float64
}

初始化表 & 创建数据

func main() {
	// 数据库连接
	dsn := "root:123456@(127.0.0.1:3306)/CSDN?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	// 初始化表
	_ = db.AutoMigrate(User{}, Order{})

	// 创建数据
	_ = CreatUser(db)
	_ = CreatOrder(db)
}

func CreatUser(db *gorm.DB) (err error) {
	err = db.Create(&[]User{
		{Username: "little_A"},
		{Username: "little_B"},
		{Username: "little_C"},
		{Username: "little_D"},
	}).Error
	return
}

func CreatOrder(db *gorm.DB) (err error) {
	err = db.Create(&[]Order{
		{UserID: 1, Price: 1},
		{UserID: 1, Price: 2},
		{UserID: 1, Price: 3},
		{UserID: 1, Price: 4},
		{UserID: 2, Price: 5},
		{UserID: 2, Price: 6},
		{UserID: 2, Price: 7},
		{UserID: 3, Price: 8},
		{UserID: 3, Price: 9},
		{UserID: 4, Price: 10},
	}).Error
	return
}

可视化查看一下


Preload()

在main函数中加入并执行

	var a []User
	db.Preload("Orders").Find(&a)
	fmt.Println(a)

控制台输出

  • 可以看到我们是对Users表的查询,Orders表的预加载,一对多的关系一目了然。

后记

感谢阅读。