在springmvc中,分页一般使用pageHelper或者mybatisplus的分页进行数据库查询分页,如果待分页的数据已经存储在一个List中,可以用以下工具类方法,完成分页数据的获取:
/** * 手动分页辅助工具方法,将一个完整的泛型fullList,按照指定页码pageNo,页大小pageSize构造返回页对象 * @param pageNo * @param pageSize * @param fullList * @param type * @return * @param <T> */ public static <T> Page<T> buildPageFromFullList(int pageNo, int pageSize, List<T> fullList, Class<T> type){ Page<T> resultPage = new Page<>(); resultPage.setCurrent(pageNo); resultPage.setSize(pageSize); resultPage.setTotal(fullList.size()); int startIndex = (pageNo - 1) * pageSize; int endIndex = Math.min(startIndex + pageSize, fullList.size()); if (CollectionUtils.isEmpty(fullList) || startIndex > endIndex) { resultPage.setSize(pageSize); resultPage.setCurrent(pageNo); return resultPage; } resultPage.setPages((long) Math.ceil((double) resultPage.getTotal() / (double) pageSize)); resultPage.setRecords(fullList.subList(startIndex, endIndex)); return resultPage; }
其中Page是mybatisplus的分页插件的类:com.baomidou.mybatisplus.extension.plugins.pagination.Page; 可以用其他分页类替换(包括自定义页类型都可以)。泛型参数T在调用时,传递List中元素类型,以便支持不同类型的List数据。
buildPageFromFullList(queryDTO.getPageNo(), queryDTO.getPageSize(), fullDataList, MediaMonitorConfig.class);
自定义的页类,可以用来替换掉mybatisplus的分页插件的类:
@Getter @Setter @NoArgsConstructor @AllArgsConstructor public class PageData<T> { private static final long serialVersionUID = 8545996863226528632L; protected List<T> records; protected long total; protected long size; protected long current; protected long pages; }