博客搬家了, 新地址 [ http://wuwz.org ],是时候换上HEXO了
Pagination.java (interface)
定义了分页常用的属性,方法
包名:com.app.pagination;
package com.app.pagination;
import java.util.List;
/**
* 通用分页接口
* @author: [email protected]
* @ClassName: Pagination
* @Version: v0.1
* @param <T>
*/
public interface Pagination<T> {
/**
* 判断是否是首页
* @return
*/
boolean isFirst();
/**
* 判断是否是尾页
* @return
*/
boolean isLast();
/**
* 判断是否有上一页
* @return
*/
boolean isPrevious();
/**
* 判断是否有下一页
* @return
*/
boolean isNext();
/**
* 获取上一页的页码
* @return
*/
int getPreviousIndex();
/**
* 获取下一页的页码
* @return
*/
int getNextIndex();
/**
* 获取当前页码
* @return
*/
int getPageIndex();
/**
* 获取当前页大小
* @return
*/
int getPageSize();
/**
* 获取总页数
* @return
*/
int getTotalPages();
/**
* 获取数据总行数
* @return
*/
int getTotalElements();
/**
* 获取当前页的数据
* @return
*/
List<T> getCurrData();
/**
* 获取数字分页链接对象
* @return
*/
BetweenIndex getBetweenIndex();
/**
* 获取每页显示的分页链接数
* @return
*/
int getPageLinkNumber();
/**
* 设置每页的分页链接数量
* @param pageLinkNumber
*/
void setPageLinkNumber(int pageLinkNumber);
}
BetweenIndex.java (interface)
该接口负责获取分页链接的开始和结尾索引
包名:com.app.pagination;
package com.app.pagination;
/**
* 开始链接-结束链接
* @author: [email protected]
* @ClassName: BetweenIndex
* @Version: v0.1
*/
public interface BetweenIndex {
/**
* 获取开始分页链接索引
* @return
*/
int getBeginIndex();
/**
* 获取结束分页链接索引
* @return
*/
int getEndIndex();
}
DefaultPagination.java (implements Pagination)
Pagination接口的默认实现类
包名:com.app.pagination.impl;
package com.app.pagination.impl;
import java.util.List;
import com.app.pagination.BetweenIndex;
import com.app.pagination.Pagination;
/**
* Pagination接口默认实现
* @author: [email protected]
* @ClassName: DefaultPagination
* @Version: v0.1
* @param <T>
*/
public class DefaultPagination<T> implements Pagination<T> {
private int totalElements;
private int pageSize;
private int totalPages;
private int pageIndex;
private QueryHandler<T> queryHandler;
private List<T> currData;
private int pageLinkNumber;
public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler, int pageLinkNumber) {
this(pageIndex, pageSize, queryHandler);
setPageLinkNumber(pageLinkNumber);
}
public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler){
//初始化数据访问回调接口
this.queryHandler = queryHandler;
//查询总行数
setTotalElements();
//修正页大小
setPageSize(pageSize);
//计算总页数:
setTotalPages();
//修正页码
setPageIndex(pageIndex);
//查询当前页数据
setCurrData();
}
private void setCurrData() {
this.currData = queryHandler.getCurrData(pageIndex, pageSize);
}
private void setPageIndex(int pageIndex) {
if(pageIndex < 1) {
this.pageIndex = 1;
} else if(pageIndex > totalPages) {
this.pageIndex = totalPages;
} else {
this.pageIndex = pageIndex;
}
}
private void setTotalPages() {
if(pageSize > 0) {
/*//普通算法:
this.totalPages = totalElements % pageSize == 0 ?
totalElements / pageSize : (totalElements / pageSize) + 1;*/
//减一公式:
this.totalPages = (totalElements + pageSize - 1) / pageSize;
}
}
private void setPageSize(int pageSize) {
if(pageSize < 1) {
this.pageSize = 1;
} else if(pageSize > totalElements) {
this.pageSize = totalElements;
} else {
this.pageSize = pageSize;
}
}
private void setTotalElements() {
this.totalElements = queryHandler.getTotalElements();
}
@Override
public boolean isFirst() {
return pageIndex == 1;
}
@Override
public boolean isLast() {
return pageIndex == totalPages;
}
@Override
public boolean isPrevious() {
return pageInd