git.zd.zone/hrpc/hrpc@v0.0.12/utils/pagination/README.md (about)

     1  # 分页工具
     2  
     3  ## 1 介绍
     4  
     5  分页工具包,主要目的是在有分页需求的接口交互的过程中更方便的去管理和处理分页参数,如页码、每页条数、总数。
     6  
     7  - [x] 支持转换MySQL分页参数;
     8  - [x]  支持转换MongoDB分页参数;
     9  - [ ]  其他分页支持;
    10  
    11  
    12  ## 2 示例
    13  
    14  实际在使用时,可直接将Pagination作为一个类型追加到业务结构体里,将入参的分页参数,设计到Page和Size两个字段上,在使用返回值的时候,将当前约束条件下的查询结果总条数设置到Total字段上。然后直接返回给gateway(或前端)即可。
    15  
    16  ```Go
    17  // page = 1
    18  // size = 2
    19  func GetList(page,size int64){
    20      // 接收入参时
    21      p := Pagination{
    22          Page:page,
    23          Size:size,
    24      }
    25      // …………
    26      
    27      // 1 MySQL  在业务层需要在SQL里添加分页limit的时候,
    28      // 可以直接调用SQLStatement()获取到格式化后的
    29      sqlLimit := p.SQLStatement()
    30      // sqlLimit 的格式就是: "1,20"
    31    
    32    	// 如果SQL里使用Limit的格式是: LIMIT x OFFSET y 那么可参考如下使用
    33    	sqlLimit := fmt.Sprint("LIMIT %d OFFSET %d",p.Limit(),p.Skip())
    34    
    35      // 2 MongoDB  在使用MongoDB的时候,也需要进行分页,通常使用如下参数
    36    	// findOptions := &options.FindOptions{}
    37  		// findOptions.SetLimit(x) // 设置Limit字段的值
    38  		// findOptions.SetSkip(y) // 设置Skip字段的值
    39    	// 这时,可以直接如下调用
    40    	findOptions := &options.FindOptions{}
    41      findOptions.SetLimit(p.Limit()) // 设置Limit字段的值
    42      findOptions.SetSkip(p.Skip()) // 设置Skip字段的值
    43  		
    44    	// 3 设置Total
    45    	// 我们在实际分页的时候,一定也需要将当前约束条件下的SQL语句查询的结果页一并返回,那么就需要设置Total字段了
    46    	p.Total = GetTotal()  // GetTotal方法是返回当前查询总条数,具体实现逻辑略过。
    47  }
    48  ```