Gin之GORM多表关联查询(多对多;自定义预加载SQL)

对于many2manygorm.Model"`gorm.Model// 连接表:user_languages若要重写它们,可以使用标签foreignKeyreferences。当然,您不需要使用全部的标签,你可以仅使用其中的一个重写部分的外键、引用。gorm.Modelgorm.Model// 会创建连接表:user_profiles。
摘要由CSDN通过智能技术生成

 数据库三个,如下:

注意:配置中间表的时候,表设计层面最好和配置的其他两张表契合,例如其他两张表为fate内的master和slave;要整合其对应关系的话,设计中间表的结构为master_id和slave_id最好(不然会涉及重写外键的操作)

重写外键(介绍)

对于 many2many 关系,连接表会同时拥有两个模型的外键,例如:

type User struct {
  gorm.Model
  Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
}

// 连接表:user_languages
//   foreign key: user_id, reference: users.id
//   foreign key: language_id, reference: languages.id

若要重写它们,可以使用标签 foreignKeyreferencesjoinforeignKeyjoinReferences。当然,您不需要使用全部的标签,你可以仅使用其中的一个重写部分的外键、引用。

type User struct {
    gorm.Model
    Profiles []Profile `gorm:"many2many:user_profiles;foreignKey:Refer;joinForeignKey:UserReferID;References:UserRefer;joinReferences:ProfileRefer"`
    Refer    uint      `gorm:"index:,unique"`
}

type Profile struct {
    gorm.Model
    Name      string
    UserRefer uint `gorm:"index:,unique"`
}

// 会创建连接表:user_profiles
//   foreign key: user_refer_id, reference: users.refer
//   foreign key: profile_refer, reference: profiles.user_refer

Many To Many | GORM - The fantastic ORM library for Golang, aims to be developer friendly.icon-default.png?t=N7T8https://gorm.io/zh_CN/docs/many_to_many.html

前期准备工作:

1、创建要操作表的models:

/models/lesson.go:

package models

type Lesson struct {
	Id      int       `json:"id"`
	Name    string    `json:"name"`
	
}

func (Lesson) TableName() string {
	return "lesson"
}

/models/student.go:

package models

type Student struct {
	Id       int
	Number   string
	Password string
	ClassId  int
	Name     string
	
	
}

func (Student) TableName() string {
	return "student"
}

/models/lessonStudent.go:

package models

type LessonStudent struct {
	LessonId  int `json:"lesson_id"`
	StudentId int `json:"student_id"`
}

func (LessonStudent) TableName() string {
	return "lesson_student"
}

2、路由创建:

package routers

import (
	"gindemo04/controllers/admin"
	"gindemo04/middle"

	"github.com/gin-gonic/gin"
)

func AdminRoutersInit(r *gin.Engine) {
	//middlewares.InitMiddleware中间件
	adminRouters := r.Group("/admin", middle.InitMiddleware)
	{

		adminRouters.GET("/student", admin.StudentController{}.Index)
		
	}
}

3、控制器创建:

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用gingorm框架进行后台开发是指在构建后台应用程序时,采用了gingorm这两个开源框架来帮助实现快速、高效且可靠的开发。 首先,gin是一个轻量级的Web框架,它基于Go语言的net/http包进行封装,并提供了更简洁的API和更快的性能。使用gin框架可以轻松地处理HTTP请求和响应,定义路由和中间件,实现参数绑定和验证,并且具备灵活的扩展性和高并发处理能力。 其次,gorm是一个开源的Go语言ORM(对象关系映射)库,它提供了一种方便的方式来操作数据库,将数据库表和Go语言的结构体进行映射,实现了数据的增删改查操作。使用gorm可以简化数据库操作的代码,提高开发效率,还支持事务处理、查询构造器等高级功能。 使用gingorm框架进行后台开发有以下几个优势: 1. 快速开发:gin框架提供了简洁的API和高性能,可以大大加速开发过程。结合gorm框架的ORM功能,可以方便地进行数据库操作,减少了与数据库交互的代码量,提高了开发效率。 2. 灵活扩展:gin框架支持中间件,在请求的不同阶段插入自定义的处理逻辑,可以实现身份验证、日志记录、错误处理等功能。gorm框架也支持自定义回调函数,可以在数据库操作的前后执行特定的业务逻辑,提供了灵活扩展的能力。 3. 高性能:gin框架底层采用了轻量级的路由引擎和快速的HTTP处理器,以及简洁的API设计,使得性能表现出色。同时,gorm框架通过合理的SQL语句生成和查询优化,能够保证数据库操作的效率。 综上所述,使用gingorm框架进行后台开发可以提供快速、高效、可靠的开发体验,同时拥有灵活的扩展性和良好的性能表现,非常适合构建中小型的后台应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵唯一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值