直接上代码:
import java.io.Serializable;
/**
* 分页
*/
public class Page implements Serializable{
// 每页显示条数
private int pageSize = 10;
// 总页数
private Long totalPage;
// 当前页码
private int pageNo;
// 当前页数据
private Object data;
/**
* 开始的数据条数
*/
public int start() {
return (pageNo - 1) * pageSize;
}
/**
* 获取每页显示条数
* 如果命名为getPageSize,序列化时将会显示
*/
public int size() {
// 基于MySQL的实现,如果是Oracle,修改为pageNo * pageSize
return pageSize;
}
/**
* 加载总页数
*/
private void initTotalPage(long totalCount) {
totalPage = totalCount / pageSize;
if (totalCount % pageSize != 0)
totalPage++;
}
/**
* 获取分页对象
*
* @param callback 查询后的数据总条数和当前页数据
* @param pageNo 当前页码
*/
public static Page getInstance(Page.PageCallback callback, int pageNo) {
return getInstance(callback, pageNo, null);
}
/**
* 获取分页对象
*
* @param callback 查询后的数据总条数和当前页数据
* @param pageNo 当前页码
* @param pageSize 每页显示条数
*/
public static Page getInstance(Page.PageCallback callback, int pageNo, Integer pageSize) {
Page page = new Page();
page.pageNo = pageNo;
if (pageSize != null && pageSize > 0) {
page.pageSize = pageSize;
}
page.initTotalPage(callback.queryTotalCount());
page.data = callback.queryData(page.start(), page.size());
return page;
}
// 用于序列化
public Long getTotalPage() {
return totalPage;
}
public Object getData() {
return data;
}
public int getPageNo() {
return pageNo;
}
public interface PageCallback {
/**
* 获取数据条数
*/
long queryTotalCount();
/**
* 获取查询结果
*/
Object queryData(int start, int size);
}
}
使用示例:
// controller
public Object findByName(String name, Integer pageNo) throws Exception {
if (StringUtils.isBlank(name)) {
return "empty";
}
Page page = Page.getInstance(new Page.PageCallback() {
@Override
public long queryTotalCount() {
return service.findCountByName(name);
}
@Override
public Object queryData(int start, int size) {
return service.findByName(name, start, size);
}
}, pageNo, 5);
return page;
}
版权声明:本文为zhaoyf7746原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。