手动分页

792人浏览 / 0人评论
            Page<YourVo> page = new Page(yourDto.getPage(), yourDto.getPageSize(), baseInfoForNewsList.size());

            Integer startIndex = PageUtil.makeStartIndex(videoForNewsQueryDto.getPage(), videoForNewsQueryDto.getPageSize(), baseInfoForNewsList.size());
            Integer endIndex = PageUtil.makeEndIndex(videoForNewsQueryDto.getPage(), videoForNewsQueryDto.getPageSize(), baseInfoForNewsList.size());

            page.setRecords(baseInfoForNewsList.subList(startIndex, endIndex + 1));
            return page;

分页工具类:

/**
 * 分页计算工具
 * 因为有些数据无法使用sql分页,即:没法使用mybatis的分页工具, 故这里自己手动分页
 *
 * 本工具类 对 页码过大的处理是, 如果页码超出了有效范围,则返回最后一页的页码
 * 这会导致前端 如果是 一个页面不断加载,则最后一页会不断重复加载
 */
public class PageUtil {

    /** <pre>得到某一页第一条记录的 下标</pre>
     * @param pageIndex:   页码,假定第一页是从 1开始计算
     * @param pageSize:    页大小
     * @param totalSize:   总记录个数
     * @return java.lang.Integer
     **/
    public static int makeStartIndex(int pageIndex, int pageSize, int totalSize) {
        if (pageIndex < 1)
            return 0;

        int totalPage = totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1 ;
        if (pageIndex > totalPage) {
            pageIndex = totalPage;
        }

        return (pageIndex - 1) * pageSize;
    }

    /** 得到某一页第一条记录的 下标
      * @param pageIndex:   页码,假定第一页是从 1开始计算
      * @param pageSize:    页大小
      * @param totalSize:   总记录个数
      * @return java.lang.Long
      **/
    public static Long makeStartIndex(Long pageIndex, Long pageSize, int totalSize) {
        if (pageIndex < 1)
            return 0L;

        Long totalPage = totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1 ;
        if (pageIndex > totalPage) {
            pageIndex = totalPage;
        }

        return (pageIndex - 1) * pageSize;
    }



    /**
     * 得到某一页最后一条记录的 下标
     * @param pageIndex 假定第一页是从 1开始计算
     * @param pageSize  每页大小
     * @param totalSize 总的元素个数
     * @return
     */
    public static int makeEndIndex(int pageIndex, int pageSize, int totalSize) {
        if (pageIndex <= 0) {
            pageIndex = 1;
        }

        int totalPage = totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1 ;
        if (pageIndex > totalPage) {
            pageIndex = totalPage;
        }

        int endIndex = pageIndex * pageSize - 1;

        if (endIndex >= totalSize)
            return totalSize - 1;

        return endIndex;
    }

    /**
     * 得到某一页最后一条记录的 下标
     * @param pageIndex 页码, 假定第一页是从 1开始计算
     * @param pageSize  每页大小
     * @param totalSize 总的元素个数
     * @return
     */
    public static Long makeEndIndex(Long pageIndex, Long pageSize, int totalSize) {
        if (pageIndex <= 0) {
            pageIndex = 1L;
        }

        Long totalPage = totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1 ;
        if (pageIndex > totalPage) {
            pageIndex = totalPage;
        }

        Long endIndex = pageIndex * pageSize - 1;

        if (endIndex >= totalSize)
            return totalSize - 1L;

        return endIndex;
    }

    /** 
     *  得到总页数
      * @param pageSize:   页大小
      * @param totalSize:  总记录数
      * @return java.lang.Long
      **/
    public static Long makeTotalPage(Long pageSize, Integer totalSize) {
        return totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1;
    }

    /** 
     *  得到总页数
     * @param pageSize:   页大小
     * @param totalSize:  总记录数
     * @return java.lang.Long
     **/
    public static Integer makeTotalPage(Integer pageSize, Integer totalSize) {
        return totalSize% pageSize== 0 ? totalSize/ pageSize : totalSize/ pageSize+ 1;
    }
}

 

全部评论