美文网首页
分页接口与实现

分页接口与实现

作者: 翼徳 | 来源:发表于2017-05-02 16:21 被阅读166次
功能:

分页接口

源码:

package com.dotions.utils;

/**
 * <p> 分页接口 </p>
 * @author Dotions 2017-05-02
 */
public interface Pageable {
    /**
     * 页号
     * */
    int getPageNumber();

    /**
     * 页大小
     * */
    int getPageSize();
    
    /**
     * 总页数
     * */
    int getTotalPages();

    /**
     * 总元素数
     * */
    int getTotalElements();
    
    /**
     * 是否有下一页
     * */
    boolean hasNext();
    
    /**
     * 下一页
     * */
    Pageable next();
}
功能:

分页对象

源码:

package com.dotions.utils;

import java.util.Collections;
import java.util.List;

/**
 * <p>
 * 分页
 * </p>
 * 
 * @author dotions 2017-05-02
 */
public class Page<T> implements Pageable {

    private int pageNo = 1;
    private int pageSize = 50;
    private int totalElements = 0;
    private List<T> elements = Collections.emptyList();

    public Page() {
        super();
    }

    public Page(int totalElements) {
        super();
        this.totalElements = totalElements;
    }

    @Override
    public int getPageNumber() {
        return pageNo;
    }

    @Override
    public int getPageSize() {
        return pageSize;
    }

    @Override
    public int getTotalPages() {
        return totalElements / pageSize + 1;
    }

    @Override
    public int getTotalElements() {
        return totalElements;
    }

    public int getStart() {
        return (getPageNumber() - 1) * getPageSize();
    }

    public int getEnd() {
        return getPageNumber() * getPageSize();
    }

    public void setPageNo(int pageNo) {
        if (pageNo > 0 && pageNo <= getTotalPages()) {
            this.pageNo = pageNo;
        }
        // 设置的页号大于总页数,则将页号设置为最后一页
        if (pageNo > 0 && pageNo > getTotalPages()) {
            this.pageNo = getTotalPages();
        }
    }

    public void setPageSize(int pageSize) {
        if (pageSize > 0) {
            this.pageSize = pageSize;
        }
    }

    public void setTotalElements(int totalElements) {
        if (totalElements >= 0) {
            this.totalElements = totalElements;
        }
    }

    public void setElements(List<T> elements) {
        this.elements = elements;
    }

    public List<T> getElements() {
        return elements;
    }

    @Override
    public boolean hasNext() {
        return getTotalElements() - getPageNumber() * getPageSize() > 0;
    }

    @Override
    public Page<T> next() {
        this.setPageNo(pageNo + 1);
        this.elements = Collections.emptyList();
        return this;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Page [pageNo=");
        builder.append(pageNo);
        builder.append(", pageSize=");
        builder.append(pageSize);
        builder.append(", totalElements=");
        builder.append(totalElements);
        builder.append(", elements=");
        builder.append(elements);
        builder.append(", hasNext()=");
        builder.append(hasNext());
        builder.append("]");
        return builder.toString();
    }

}

相关文章

  • SpringMVC分页参数自动注入

    通过实现HandlerMethodArgumentResolver接口,帮助分页查询接口自动注入分页参数,同时可以...

  • 分页接口与实现

    功能: 分页接口 源码: 功能: 分页对象 源码:

  • 模板接口

    目录 后端模板匹配实现过程 1. 后端模板匹配实现过程属性 接口功能 返回用户照片分页信息,并按照模板内容和分页照...

  • mybaits有几种分页方式?

    三.拦截器分页 创建拦截器,拦截mybatis接口方法id以ByPage结束的语句 四.RowBounds实现分页...

  • 品优购学习笔记二-品牌列表分页的实现

    1.品牌列表分页的实现 效果展示: 1.1后端代码 1.1.1 分页结果封装实体 1.1.2服务接口层 1.1.3...

  • Spring Data Jpa:分页、Specification

    分页的主要接口与类 PagingAndSortingRepository 继承自 CrudRepository 接...

  • Elastichsearch分页

    在项目中我用到ES的两种分页方式,这里记录一下。 Pageable深度分页 Spring data实现接口接收Ma...

  • Vue滚动底部分页实现

    滚动到底部分页实现的原理:1.监听滚动事件,滚动到底部100px的时候去请求接口获取分页数据2.将接口返回的数据和...

  • 使用Spring JPA Save 方法注意

    无论是实现功能较基本的CrudRepository接口 或者 可以提供分页等复杂操作的JpaRepository接...

  • spring+springMVC+mybatis的整合 part

    可以设置其他的页码和条数测试,均可以通过,所以分页的接口已经完成。单独拿出一个页面来实现 其实分页列表也没什么,重...

网友评论

      本文标题:分页接口与实现

      本文链接:https://www.haomeiwen.com/subject/practxtx.html