本次我们接着上三篇文章进行讲解《从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层实现方法:
代码语言:go复制......
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层接口:
代码语言:go复制......
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})
}
......
测试:
分页后的结果:
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表