1. model层
主要是接受参数与返回参数以及结构体的嵌套
1.1 user结构体
type Members struct {
ID int64 `json:"id" gorm:"id"`
Username string `json:"username" gorm:"username"`
Password string `json:"password" gorm:"password"`
CreateTime time.Time `json:"create_time" gorm:"create_time"`
UpdateTime time.Time `json:"update_time" gorm:"update_time"`
Groupid int8 `json:"groupid" gorm:"groupid"`
Balance int64 `json:"balance" gorm:"balance"`
Avatar string `json:"avatar" gorm:"avatar"`
}
1.2 请求结构体
type SearchUserParams struct {
system.Members
req.PageInfo
}
// Page结构体
type PageInfo struct {
Current int `json:"current"` // 当前页
PageSize int `json:"pageSize"` // 数据条数
}
1.3 响应结构体
type PageList struct {
List interface{} `json:"list"` // 数据集合
Total int64 `json:"total"` // 总条数
CurrentPage int64 `json:"currentPage"` // 当前页
PageSize int64 `json:"pageSize"` // 数据条数
}
2. api层
func (b *BaseApi) GetList(c *gin.Context) {
// 变量声明及参数校验
appG := response.Gin{C: c}
code := response.INVALID_PARAMS
var param req.SearchUserParams
err := c.ShouldBindJSON(¶m)
if err != nil {
global.GVA_LOG.Info("参数解析错误", zap.Any("err", err))
appG.Response(code, code, nil)
return
}
// 获取数据
code = response.SUCCESS
page, err := service.ServiceApp.SystemService.UserService.GetListByPage(¶m)
if err != nil {
code = response.ERROR
appG.Response(code, code, nil)
return
}
appG.Response(code, code, page)
}
3. service层
func (userService *UserService) GetListByPage(param *req.SearchUserParams) (response.PageList, error) {
var page = param.PageInfo
var user = param.Members
var resp response.PageList
resp.PageSize = int64(param.PageSize)
resp.CurrentPage = int64(param.Current)
//配置gorm条件查询,这里仅展示了按昵称模糊查询,要增加直接加if即可
db := global.GVA_DB.Model(&system.Members{})
if user.Avatar != "" {
db = db.Where("avatar Like ?", "%"+user.Avatar+"%")
}
err := db.Count(&resp.Total).Error
if err != nil {
return resp, err
}
var users []system.Members
err = db.Offset(page.Current * page.PageSize).Limit(page.PageSize).Find(&users).Error
resp.List = users
return resp, nil
}
4. 路由层配置路由
r.POST("getList", v1.User.GetList)
5. 访问效果