一、概述
本小节主要罗列一下常见的查询以及相应的代码示例
1.假设你有一个轮播图表,请查询出轮播图中的所有记录
2.获取后台管理用户列表,并把用户的角色信息也查询出来
3.查询用户订单信息,要求:查询某用户买了某商品的订单信息。本例是查询用户购买的视频的详细的订单信息(用户信息、视频信息、订单信息)
4.查询用户播放记录,要求:查询谁播放了第几节的哪一个视频
二、代码示例
1.假设你有一个轮播图表,请查询出轮播图中的所有记录
a.轮播图结构体定义
type VideoBanner struct { Id int64 `json:"id"` Url string `json:"url"` Img string `json:"img"` Widget int `json:"widget"` Description string `json:"description"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int64 `json:"deleted"` } // 设置结构体对应的表名 func (VideoBanner) TableName() string { return "video_banner" }
b.查询轮播图列表
// 查询视频轮播图列表 func getVideoBannerListHandler(context *gin.Context) { db := connectMySql().Debug() var videoBanners []entity.VideoBanner //这个Select可以指定要返回的字段,没有指定的则不返回,如果不指定Select中的字段,则默认全部返回 err := db.Select("id", "url", "img", "description").Find(&videoBanners).Error if err != nil { response.ShowError(500, "查询视频轮播图失败", context) return } response.ShowSuccess(videoBanners, context) }
c.查询结果
2.获取后台管理用户列表,并把用户的角色信息也查询出来
a.后台管理用户结构体和角色结构体
// 后台用户结构体 type AdminUser struct { Id int64 `json:"id"` Account string `json:"Account"` Password string `json:"password"` NickName string `json:"nick_name"` Role string `json:"role"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` AdminRoles []AdminRole `json:"adminRoles" gorm:"foreignKey:Role;references:Role;"` AdminUserLoginLogs []AdminUserLoginLog `json:"adminUserLoginLogs" gorm:"foreignKey:UserId";` } // foreignKey 指定当前模型的列作为连接表的外键 // references 指定引用表的列名,其将被映射为连接表外键 func (AdminUser) TableName() string { return "admin_user" } // 后台用户角色表 type AdminRole struct { Id int64 `json:"id"` Role string `json:"role"` RoleDescription string `json:"role_description"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` } func (AdminRole) TableName() string { return "admin_role" }
b.查询后台管理用户列表并把角色也一块查询出来
// 获取后台管理用户角色 func getAdminUserRolesHandler(context *gin.Context) { db := connectMySql().Debug() var adminUsers []entity.AdminUser err := db.Preload("AdminRoles").Preload("AdminUserLoginLogs").Find(&adminUsers).Error if err != nil { response.ShowError(500, "查询后台用户角色失败", context) return } response.ShowSuccess(adminUsers, context) }
c.查询结果
3.查询用户订单信息,要求:查询某用户买了某商品的订单信息。本例是查询用户购买的视频的详细的订单信息(用户信息、视频信息、订单信息)
a.订单信息相关的结构体
// 用户实体 type User struct { Id int64 `json:"id"` Name string `json:"name"` Pwd string `json:"pwd"` HeadImg string `json:"head_img"` Phone string `json:"phone"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` Sort int `json:"sort"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` } // 设置结构体对应的表名 func (User) TableName() string { return "user" } type VideoOrder struct { Id int64 `json:"id"` OutTradeNo string `json:"out_trade_no"` State int `json:"state"` TotalFee int64 `json:"total_fee"` VideoId int64 `json:"video_id"` VideoTitle string `json:"videoTitle"` VideoImg string `json:"videoImg"` UserId int64 `json:"user_id"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` Sort int `json:"sort"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` Video Video `json:"video" gorm:"foreignKey:VideoId;"` User User `json:"user" gorm:"foreignKey:UserId;"` } func (VideoOrder) TableName() string { return "video_order" } type Video struct { Id int64 `json:"id"` Title string `json:"title"` Summary string `json:"summary"` CoverImg string `json:"cover_img"` Price int64 `json:"price"` CreateTime string `json:"create_time"` Point float64 `json:"point"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int64 `json:"deleted"` } func (Video) TableName() string { return "video" }
b.查询订单列表
// 查询视频订单(某用户买了某视频的详情信息) func getVideoOrderListHandler(context *gin.Context) { db := connectMySql().Debug() var orders []entity.VideoOrder err := db.Preload("Video").Preload("User").Find(&orders).Error if err != nil { response.ShowError(500, "查询订单列表异常", context) return } response.ShowSuccess(orders, context) }
c.查询结果
4.查询用户播放记录,要求:查询谁播放了第几节的哪一个视频
a.查询播放记录相关的结构体
// 视频播放记录结构体 type PlayRecord struct { Id int64 `json:"id"` UserId int64 `json:"userId"` VideoId int64 `json:"videoId"` EpisodeId int64 `json:"episodeId"` CurrentNum int `json:"current_num"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int64 `json:"deleted"` User User `json:"user" gorm:"foreignKey:UserId;"` Video Video `json:"video" gorm:"foreignKey:VideoId;"` Episode Episode `json:"episode" gorm:"foreignKey:EpisodeId;"` } // 设置结构体对应的表名 func (PlayRecord) TableName() string { return "play_record" } // 用户实体 type User struct { Id int64 `json:"id"` Name string `json:"name"` Pwd string `json:"pwd"` HeadImg string `json:"head_img"` Phone string `json:"phone"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` Sort int `json:"sort"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` } // 设置结构体对应的表名 func (User) TableName() string { return "user" } type Video struct { Id int64 `json:"id"` Title string `json:"title"` Summary string `json:"summary"` CoverImg string `json:"cover_img"` Price int64 `json:"price"` CreateTime string `json:"create_time"` Point float64 `json:"point"` UpdateTime string `json:"update_time"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int64 `json:"deleted"` } func (Video) TableName() string { return "video" } // 集(集中包含章节) type Episode struct { // gorm.Model Id int64 `json:"id"` Title string `json:"title"` Num int `json:"num"` Ordered int `json:"ordered"` PlayUrl string `json:"play_url"` ChapterId int64 `json:"chapter_id"` Free int `json:"free"` VideoId int64 `json:"video_id"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` Sort int `json:"sort"` CreateUser int64 `json:"create_user"` UpdateUser int64 `json:"update_user"` Deleted int `json:"deleted"` Video Video `json:"video" gorm:"foreignKey:VideoId;"` } func (Episode) TableName() string { return "episode" }
b.查询播放记录
// 查询视频播放记录(查询:谁播放了视频、播放了哪个章节的哪个视频) func getPlayRecordListHandler(context *gin.Context) { db := connectMySql().Debug() var playRecords []entity.PlayRecord err := db.Preload("User").Preload("Video").Preload("Episode").Find(&playRecords).Error if err != nil { response.ShowError(500, "查询播放记录失败", context) return } response.ShowSuccess(playRecords, context) }
c.查询结果
标签:string,映射,create,查询,json,实例,int64,user,Gorm From: https://www.cnblogs.com/tony-yang-flutter/p/17967842