使用偏移量的方式进行分页查询(页内偏移量计算)

  本篇文章为你整理了使用偏移量的方式进行分页查询(页内偏移量计算)的详细内容,包含有分页偏移量计算 页内偏移量计算 偏移量在哪 偏移量处发生格式错误是什么意思 使用偏移量的方式进行分页查询,希望能帮助你了解 使用偏移量的方式进行分页查询。

  注意:
 

  这种方式分页查询前提是有排序字段且该字段是连续的,否则该方式查询指定页码数据时查询的数据是不对的

  优势:
 

  根据id字段分页时,本方法先select该数据,再向后偏移查询数据,可以使用主键索引进行查询,在数据量比较大的表中,本方法具有性能优势

  需要接收的参数

  

public ApiResponse getBlackList(

 

   @RequestParam(name = "pageSize", required = false) Integer pageSize,

   @RequestParam(name = "cursor", required = false) String cursor) {

   //pageSize 页面容量

   /*cursor 即偏移量,使用数据id或者某个专门用来分页的字段,比如上次查询了id为5-10的数据,下一页数据cursor的值应为10,service层的代码查询id = cursor+1的数据,查询的数量为pageSize个,如果没有携带cursor,按照查询第一页处理*/

  

 

  service

  

// 注:查询的时候传pageSize + 1是为了获取下一页第一条数据的id,返回给前端作为下一页的cursor传过来

 

  List pojo result = new ArrayList();

  if(StringUtils.isBlank(cursor)) {

   //查询首页

   result = repository.findFirstPage(pageSize + 1);

  }else {

   Long longCursor = null;

   try {

   //解密cursor

   byte[] decode = Base64.getUrlDecoder().decode(cursor);

   //转成Long类型

   longCursor = new Long(new String(decode));

   } catch (IllegalArgumentException e) {

   log.warn("parameter [{}] type exception", cursor);

   throw new IllegalArgumentException("Unexpeted value: cursor [" + cursor + "]");

   //查询

   result = repository.findPage(pageSize + 1, longCursor);

  if (result.size() pageSize) {

   // 删除最后一条数据,因为那是下一页的第一条

   Pojo pojo= result.get(result.size() - 1);

   result.remove(pojo);

   //获取下一页第一条id

   Long id = pojo.getId();

   //加密该id返回给前端,用作下一页的查询

   String newCursor = Base64.getUrlEncoder().encodeToString(String.valueOf(id).getBytes());

   resultMap.put("cursor", newCursor);

  

 

  repository

  

/*查找首页*/

 

  select * from table where 查询条件 order by model.id limit :pageSize

  /*分页查询*/

  select * from table where 查询条件 model.id =:cursor order by model.id limit :pageSize

  

 

  以上就是使用偏移量的方式进行分页查询(页内偏移量计算)的详细内容,想要了解更多 使用偏移量的方式进行分页查询的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: