方法根据分页框架为例,需输入参数(当前页码,每页行数),返回:分页数据、 总行数、当前页、总页数。
注:当数据量过大时效率上不如SQL分页查询,建议在 查询出的数据条数较少时使用,因其原理是查询出所有所需数据后再根据分页需求进行代码分页。
1、分页实体类
import java.util.List;
public class Page<T> {
private List<T> pages; //数据
private long totalCount; //总行数
private int pageIndex; //当前页
private int totalPages; //总页数
public List<T> getPages() {
return pages;
}
public void setPages(List<T> pages) {
this.pages = pages;
}
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
}
2、分页方法
/**
* <p>分页方法</p>
* <p>参数(当前页码,每页行数)</p>
* <p>返回 pages 数据</p>
* <p> totalCount 总数</p>
* <p> pageIndex 当前页</p>
* <p> totalPages 总页数</p>
*/
public Page<User> pages(int pageIndex,int hang) {
List<User> users = userDao.findAll(); //获取所需数据
int fist = pageIndex*hang-hang; //获取当前页的第一行下标
int last = pageIndex*hang; //获取当前页的最后一行下标+1
if(last>users.size()) last=users.size();
List<User> user= new ArrayList<>();
for(int s=fist;s<last;s++){
user.add(users.get(s));
}
Page<User> page = new Page<User>();
page.setTotalCount(users.size()); //总行数
page.setPageIndex(pageIndex); //当前页
page.setTotalPages((int)Math.ceil((float)users.size()/hang)); //总页数
page.setPages(user); //分页数据
return page;
}
3、超级二合一:访问时只需调用有参构造方法;
List<User> users = userDao.findAll(); //获取所需数据
Page<User> pages = new Page(pageIndex,hang,users);
实体类:
import java.util.ArrayList;
import java.util.List;
public class Page<T> {
private List<T> pages; //数据
private long totalCount; //总数
private int pageIndex; //当前页
private int totalPages; //总页数
public List<T> getPages() {
return pages;
}
public void setPages(List<T> pages) {
this.pages = pages;
}
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
/**
* <p>分页方法</p>
* <p>参数(当前页码,每页行数)</p>
* <p>返回 pages 数据</p>
* <p> totalCount 总数</p>
* <p> pageIndex 当前页</p>
* <p> totalPages 总页数</p>
*/
public Page(int pageIndex,int hang,List<T> pages){
int fist = pageIndex*hang-hang; //获取当前页的第一行下标
int last = pageIndex*hang; //获取当前页的最后一行下标+1
if(last>pages.size()) last=pages.size();
List<T> page= new ArrayList<T>();
for(int s=fist;s<last;s++){
page.add(pages.get(s));
}
this.pages = page; //分页数据
this.totalCount = pages.size(); //总行数
this.pageIndex = pageIndex; //当前页
this.totalPages = (int)Math.ceil((float)pages.size()/hang); //总页数
}
}