1.分页技术的分类
- 客户端分页:直接将全部的数据或多页结果数据一次性返回给客户端,客户端通过展现组件进行数据分页的控制。
- 数据库分页:数据查询时,数据库仅返回一页数据给客户端。
- 服务端分页:从数据库返回全部或多页的数据,在服务端缓存多页的数据,但只是返回一页数据给客户端。
2.各分页技术的优缺点:
- 客户端分页:可以减小和服务器交互的次数,,在进行分页切换时,直接从客户端的缓存中获取数据,无须和服务端进行再次交互,提高了系统交互性,但是会增加第一次交互的负荷。
- 数据库分页:要求每次切页时都要访问数据库,这样一来增加了数据库访问的并发性,但是每次从数据库返回的数据较少,当再次交互的负荷减轻。
- 服务端分页:在客户端与数据库之间寻求平衡,它既减少了数据库访问的并发性,同时使服务端返回给客户端的当次负荷也比较,但是服务端分页技术需要考虑数据缓存、数据同步等问题,提高了系统的复杂性。
3.分页器的实现
package com.jackfrued.domain;
import java.util.Collections;
import java.util.List;
public class Page<T> {
private static final int DEFAULT_SIZE = 10;//默认页数
private int currentPage;//当前页的数据
private List<T> data;//存放当前页中的数据
private int totalPage;//总记录数
private int beginPage;//开始页
private int endPage;//结束页
//构造空页
public Page() {
this(0, DEFAULT_SIZE, 0, Collections.EMPTY_LIST);
}
//默认的构造方法
public Page(int currentPage, int size, int totalCount, List<T> data) {
this.currentPage = currentPage;
this.data = data;
totalPage = (totalCount + size - 1) / size;
// totalPage = totalCount % size == 0 ? totalCount / size : totalCount / size + 1;
if(totalPage < 10) {
beginPage = 1;
endPage = totalPage;
}
else {
beginPage = currentPage - 4;
endPage = currentPage + 5;
if(beginPage < 1) {
beginPage = 1;
}
if(endPage > totalPage) {
endPage = totalPage;
}
}
}
public int getCurrentPage() {
return currentPage;
}
public List<T> getData() {
return data;
}
public int getTotalPage() {
return totalPage;
}
//该页是否还有下一页
public boolean isHasNextPage() {
return currentPage < totalPage;
}
//该页是否还有上一页
public boolean isHasPrevPage() {
return currentPage > 1;
}
public int getBeginPage() {
return beginPage;
}
public int getEndPage() {
return endPage;
}
}