本次我们接着上三篇文章进行讲解《从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}) } ......
测试:
分页后的结果: