java--分页查询接口设计及分页器的实现

时间:2022-02-22 12:58:23

1.分页技术的分类

  1. 客户端分页:直接将全部的数据或多页结果数据一次性返回给客户端,客户端通过展现组件进行数据分页的控制。
  2. 数据库分页:数据查询时,数据库仅返回一页数据给客户端。
  3. 服务端分页:从数据库返回全部或多页的数据,在服务端缓存多页的数据,但只是返回一页数据给客户端。

 

2.各分页技术的优缺点:

  1. 客户端分页:可以减小和服务器交互的次数,,在进行分页切换时,直接从客户端的缓存中获取数据,无须和服务端进行再次交互,提高了系统交互性,但是会增加第一次交互的负荷。
  2. 数据库分页:要求每次切页时都要访问数据库,这样一来增加了数据库访问的并发性,但是每次从数据库返回的数据较少,当再次交互的负荷减轻。
  3. 服务端分页:在客户端与数据库之间寻求平衡,它既减少了数据库访问的并发性,同时使服务端返回给客户端的当次负荷也比较,但是服务端分页技术需要考虑数据缓存、数据同步等问题,提高了系统的复杂性。

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;
 }
 
}