gorm分頁操作


一、綁定參數:

type Page struct {
    Page    int `form:"page"`
    Size    int `form:"size"`
    Desc    int `form:"desc"`
}
//-------------router內-----------------------------//
var p Page
if c.ShouldBindQuery(&p) != nil {
c.JSON(http.StatusUnauthorized, gin.H{
"error": "參數錯誤",
})
return
}
page := p.Page
pageSize := p.Size
desc := p.Desc
if page <= 0 {
  page = 1
}
 

構建傳參結構體,包含頁碼、分頁大小以及正負序,除此之外還可以拓展關鍵字keyword,使用like進行模糊搜索,這里就不展開了。

二、計算總頁數:

var total int
DB.Model(&Comment{}).Count(&total)
pageNum := total / pageSize
if total % pageSize != 0{
    pageNum++
}

先計算總數量total,用總的數量total整除頁大小pageSize得到頁數量pageNum(有余數需要加一頁)。

拓展:對比總頁數和選擇頁數,如果超出范圍,就返回錯誤。

三、分頁查詢:

err = DB.Limit(pageSize).Offset((page-1)*pageSize).Find(&comments).Error
if err != nil {
    c.JSON(http.StatusUnauthorized, gin.H{
        "error":  err.Error(),
    })
}

Limit:返回的數量,即頁大小

Offset:按順序跳過數量(一般以創建時間為標准),數量為 (頁數 - 1) * 頁大小

Find:不解釋了

可能用到的拓展:

.Order("created_at desc")     // 按創建時間反向
.Where(fmt.Sprintf(" comment like %q ", ("%" + keyword)))  // 關鍵字模糊搜索

四、返回樣例

c.JSON(200, gin.H{
    "status":  "success",
    "data": serializer.BuildComments(comments),
    "total": total,
    "page_num": pageNum,
})

需要返回總頁數,總數量可選,方便前端進行分頁處理,序列化和狀態碼看個人。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM