写点什么

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

作者:Barry Yan
  • 2022-11-05
    北京
  • 本文字数:647 字

    阅读完需:约 2 分钟

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

本次我们接着上三篇文章进行讲解《从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})}
......
复制代码


测试:



分页后的结果:



发布于: 刚刚阅读数: 3
用户头像

Barry Yan

关注

做兴趣使然的Hero 2021-01-14 加入

Just do it.

评论

发布
暂无评论
从3开始,在业务系统中增加分页功能_go语言_Barry Yan_InfoQ写作社区