gin + gorm实现分页和条件查询

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(&param)
	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(&param)
	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. 访问效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值