分页接口的实现

目录

一、分页接口 Page.java

二、实现page接口 Pagination.java

三、编写分页请求 PageRequest.java

四、使用分页:

五、分页的使用接口实现

六、编写SQL语句


 

一、分页接口 Page.java

/**
 * 分页接口
 * <p></p>
 * Created on 2017/10/30.
 */
public interface Page<T> {
    /**获取当前页码*/
    int getPageNo();
    /**获取当前页大小*/
    int getPageSize();
    /**获取总记录*/
    int getTotalCount();
    /*** 获取总页数*/
    int getTotalPage();
    /**获取当前页数据*/
    List<T> getData();
    /** 是否有下一页*/
    boolean hasNextPage();
    /** 是否有上一页*/
    boolean hasPreviousPage();
    /**上一页*/
    int getNextPage();
    /**下一页*/
    int getPreviousPage();
    /** mysql专用,获取数据偏移量
     * <p></p>
     * @return long mysql记录开始位置
     */
    long getOffset();
}

二、实现page接口 Pagination.java

/**
 * 分页对象,实现page接口
 * <p></p>
 * Created by tanwei3 on 2017/10/30.
 */
public class Pagination<T> implements Page<T>, Serializable {

    private static final long serialVersionUID = -300961120216439654L;
    /** 默认第一页*/
    private static final int DEFAULT_PAGE_NO = 1;
    /** 默认页大小*/
    private static final int DEFAULT_PAGE_SIZE = 10;
    /**当前页码,默认第一页*/
    private int pageNo = DEFAULT_PAGE_NO;
    /** 页大小*/
    private int pageSize = DEFAULT_PAGE_SIZE;
    /** 总记录数*/
    private int totalCount = 0;
    /**当前页数据*/
    private List<T> data;
    public Pagination() {
    }

    public Pagination(Integer pageNo, Integer pageSize) {
        this.pageNo = pageNo;
        this.pageSize = pageSize;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    @Override
    public long getOffset() {
        return (long) (getPageNo()- 1) * pageSize;
    }

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

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

    @Override
    public int getTotalCount() {
        return totalCount;
    }

    @Override
    public int getTotalPage() {
        if(getPageSize()>0){
            return (getTotalCount() / getPageSize() + (getTotalCount() % getPageSize() == 0 ? 0 : 1));
        }else{
            return 0;
        }
    }

    @Override
    public List<T> getData() {
        return data;
    }

    @Override
    public boolean hasNextPage() {
        return pageNo < getTotalPage();
    }

    @Override
    public boolean hasPreviousPage() {
        return pageNo > 1;
    }

    @Override
    public int getNextPage() {
        return (this.getPageNo() >= this.getTotalPage())?this.getTotalPage():this.getPageNo() + 1;
    }

    @Override
    public int getPreviousPage() {
        return (this.getPageNo() <= 1)?1:this.getPageNo() - 1;
    }
}

三、编写分页请求 PageRequest.java

使用方法 : 请求patamDTO extends PageRequest

/**
 * 分页查询请求,兼容以前的PageQuery
 * <p></p>
 * Created by on 2017/11/23.
 */
public class PageRequest implements Serializable {

    private static final long serialVersionUID = 4701209877284326452L;

    /**
     * 当前页号(同page),从1开始
     */
    private int index = 1;

    /**
     * 每页大小,默认10
     */
    private int pageSize = 10;

    /**
     * orderBy语句
     */
    private String orderByClause;


    /**
     * 获取当前页号,同getPage
     * @return int 页号
     */
    public int getIndex() {
        return index;
    }

    /**
     * 设置当前页号,同setPage
     * @param index 当前页号
     */
    public void setIndex(int index) {
        this.index = index;
    }


    public int getPageSize() {
        return pageSize;
    }

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

    public String getOrderByClause() {
        return orderByClause;
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    /**
     * mysql专用,获取数据偏移量
     * <p></p>
     * @return long mysql记录开始位置
     */
    public long getOffset() {
        return (long) (index - 1) * pageSize;
    }


    //===============================以下方法辅助类,用于兼容老代码============================

    /**
     * 获取当前页号,同getIndex
     * @return int 页号
     */
    public int getPage() {
        return index;
    }

    /**
     * 设置当前页号,同setIndex
     * @param page 当前页号
     */
    public void setPage(int page) {
        this.index = page;
    }

    /**
     * mysql专用,获取数据偏移量,同getOffset
     * <p></p>
     * @return long mysql记录开始位置
     */
    public long getStartRow() {
        return getOffset();
    }


}

 

四、使用分页:

Pagination<EnumTypeDetailDto> enumTypeDetailPage(EnumTypeDetailDto enumTypeDetailDto)

五、分页的使用接口实现

    public Pagination<EnumTypeDetailDto> enumTypeDetailPage(EnumTypeDetailDto enumTypeDetailDto) {

        Integer totalCount = enumTypeDetailMapper.totalCount(enumTypeDetailDto);
        logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,totalCount={}", totalCount);
        List<EnumTypeDetailDto> enumTypeDetailDtoList = enumTypeDetailMapper.enumTypeDetailPage(enumTypeDetailDto);
        logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,enumTypeDetailDtoList={}", JsonUtil.toJSONString(enumTypeDetailDtoList));
        Pagination<EnumTypeDetailDto> page = new Pagination();
        page.setPageSize(enumTypeDetailDto.getPageSize());
        page.setPageNo(enumTypeDetailDto.getPageNo());
        page.setTotalCount(totalCount);
        page.setData(enumTypeDetailDtoList);

        logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,page={}", JsonUtil.toJSONString(page));
        return page;
    }

六、编写SQL语句

    <!--    分页查询-->
    <select id="enumTypeDetailPage" parameterType="com.jd.newnethp.diag.man.center.export.dto.EnumTypeDetailDto"
            resultType="com.jd.newnethp.diag.man.center.export.dto.EnumTypeDetailDto">
        select
        <include refid="QUERY_COLUMN_LIST"/>
        from newnethp_enum_detail
        where
        status = 1
        <if test="typeCode!='' and typeCode!=null">
            and type_Code=#{typeCode}
        </if>
        order by created desc
        <include refid="QUERY_LIMIT_CONDITION"/>
    </select>

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值