从3开始,在业务系统中增加分页功能

129 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本次我们接着上三篇文章进行讲解《从0开始,用Go语言搭建一个简单的后端业务系统》《从1开始,扩展Go语言后端业务系统的RPC功能》《从2开始,在Go语言后端业务系统中引入缓存》

这一节相对比较的简单,增加分页功能的实现利用了gorm的封装的方法并且同步更改了Gin的接收参数,进而实现了分页功能。

设计逻辑

SQL语法SELECT * FROM table LIMIT 10 OFFSET 5 ,翻译过来就行从5开始取10条数据,OFFSET可以理解成跳过这几行从后面开始取数据,LIMIT就是取几行数据。

因此我们在gorm中就可以利用封装好的API,如Limit()和Offset()等,但是需要两个参数,一个就是page代表第几页,另一个则是limit代表每页多少条数据,接下来写代码。

下面我们看下修改后的代码

dao层实现方法:

......

func (impl CountNumDAOImpl) FindAllNumInfo(ctx context.Context, page int, limit int) []entity.NumInfo {
   var infos []entity.NumInfo
   if page <= 0 || limit <= 0 {
      impl.db.Find(&infos)
   } else {
      impl.db.Limit(limit).Offset((page - 1) * limit).Find(&infos)
   }
   return infos
}

......

controller层接口:

......

func (impl NumInfoControllerImpl) FindAll(c *gin.Context) {
   page := c.Query("page")
   limit := c.Query("limit")
   numInfos := impl.dao.FindAllNumInfo(c, cast.ToInt(page), cast.ToInt(limit))
   c.JSON(200, map[string]interface{}{"code": 0, "msg": "", "count": len(numInfos), "data": numInfos})
}

......

测试:
在这里插入图片描述
分页后的结果:
在这里插入图片描述