Twenty-five years without you

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2023-01-05 16:15  Rumble Zheng  阅读(79)  评论(0编辑  收藏  举报