分页查询接口指南

857 阅读1分钟

前言

在web开发中,在页面展示时经常会遇到分页技术,常见的分页实现的思路有:

客户端分页:直接将全部或多页结果数据一次性返回给客户端,客户端通过展现组件进行数据分页的控制。
数据库分页:进行数据查询时,数据库返回一页数据给客户端。
服务器分页:从数据库返回全部或者多条数据,在服务器端进行缓存,但是每次只返回一页数据给客户端。

PageHelper分页插件

PageHelper.startPage(currentPage, pageSize); 
List<VirtualApplicationInfo> result = virtualApplicationMapper.select(virtualApplySelect);
return new PageInfo<>(result);

应用:mybatis

Page 类(mybatis-plus)

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...

@Override
public Page<UmsMenu> list(Long parentId, Integer pageSize, Integer pageNum) {
    Page<UmsMenu> page = new Page<>(pageNum, pageSize);
    QueryWrapper<UmsMenu> wrapper = new QueryWrapper<>();
    wrapper.lambda().eq(UmsMenu::getParentId, parentId)
            .orderByDesc(UmsMenu::getSort);
    return page(page, wrapper);
}

,返回的 Page<T> 可以使用自定义的 CommonPage<T> 获取必要的分页信息。

应用:mybatis-plus

Limit关键字

在SQL语句中,使用Limit关键字分页;

subList()方法

List<CheckPermissionVO> paging(CheckPermissionDTO checkPermissionDTO, List<CheckPermissionVO> voList) { 
    //内存分页 
    int page = Integer.parseInt(checkPermissionDTO.getCurrentPage()); 
    int size = Integer.parseInt(checkPermissionDTO.getPageSize()); 
    //start:当前页的第一条是总记录数的第几条 
    //end:当前页的最后一条是总记录数的第几条 
    int start = page * size - size; 
    int end = page * size >= voList.size() ? voList.size() : page * size; 
    //返回某个范围内的记录,不足一页大小则返回总记录数
    if (start > end) {
        start = end;
    }
    List<CheckPermissionVO> list = voList.size() > size ? voList.subList(start, end) : voList; 
    return list; 
}