分页如何实现

前提

各个数据库分页语句不一样,已MYSQL语句为例

SELECT * FROM book b limit 3 , 5
表示从book表中的第三条数据开始 连续读出5条数据.

开始

  1. 在model包中创建一个pagination model
package com.gavin.exam.model;

import com.gavin.exam.util.PropertyUtil;

public class Pagination {

    private static final String KEY_PAGE_SIZE = "pagination.pageSize";

    private int totalCount;

    private int pageSize;  //每一页的数量  在外部定义
    private int pageCount;  //总共多少页  不提供set方法只提供get方法
                            //因为具体的可以通过totalCount和pageSize算出来

    private int currentPage; //当前第几页
    private int offset;   //偏移量

    public int getTotalCount() {
        return totalCount;
    }

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

    public int getPageSize() {
        if(pageSize == 0) {
            String size = PropertyUtil.getProperty(KEY_PAGE_SIZE);
            pageSize = Integer.parseInt(size);
        }
        return pageSize;
    }

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

    public int getPageCount() {
        if (totalCount < 1) {
            pageCount = 0;
            return pageCount;
        }
        pageCount = (totalCount - 1) / getPageSize() + 1;   //totalCount-1考虑到整除的情况
        return pageCount;
    }

    public int getCurrentPage() {
        if (currentPage < 1) {
            currentPage = 1;
        }
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getOffset() {
        offset = (getCurrentPage() - 1) * getPageSize();
        return offset;
    }
}
  1. 在servlet中获取currentPage 默认为1
    并进行一些必要的判断

  2. 在bookservice query中传入user_id 和pagination对象

  3. 进入Dao层次进行数据查询

DAO

  1. query(int userId,Pagination pagination)
  2. getTotalCount(userId)
  3. 返回数据

你可能感兴趣的:(分页如何实现)