前言
在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;
}