今天来说一说分页的实现,传统的分页主要分为两种:
1.数据全部查出再分页:后期查询速度快,会占有较多的内存
2.按照分页数据查找数据:后期查询稍微慢一点,内存占用的较少
一般都会选择第二种,因为计算机中,性能总是和内存挂钩的,而且第二种也可以避免查无用数据,因此就以第二种讲解,第一种比第二种简单的多。
使用分页必不可少的是在数据库查询数据,那数据库分页都需要的参数是必须传过去的,只有这样才能使用数据库查数据
那么要传什么参数进去呢?先看一看百度的分页效果
而且我还专门数了数百度每页的记录数是14条,看到这些有没有感到豁然开朗,没错,这样就可以利用数据库实现分页查找了。
limit x,y;有了前边的数据是不是就可以算出x和y了,因此,在我们实现分页的处理需要传进去的参数就是每页的条数和当前页数。
总页数可以通过数据库聚合函数和传入的参数计算而来(如果有余数就加一页)
totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
实现思想很简单,下来看看通过代码提取的分页模型
以每个页面只有九个页码为里例子,当然那个页码数可以随便加多少,百度的页码是十页,我感觉十页不太好看(没有对称美)就选择九页
主要的逻辑点在下边这块代码
/*此处是用于计算开始页和结束页(均匀分配)
*如果总数超过九页,如果计算出的当前页码小于等于0,那就说明currentPage不大于四,那就从1开始,那就+8算出结束页,如果结束页大于总页数 ,那就按照结束页-8算出开始页,否则就少于9页,从1开始。
*/
startPage = currentPageNum - 4; //5
endPage = currentPageNum + 4; //13
//看看总页数够不够9页
if(totalPageNum>9){
//超过了9页
if(startPage < 1){
startPage = 1;
endPage = startPage+8;
}
if(endPage>totalPageNum){
endPage = totalPageNum;
startPage = endPage-8;
}
}else{
//不够9页
startPage = 1;
endPage = totalPageNum;
}
分页模型方法的代码
public PageModel(int currentPageNum,int totalRecords,int pageSize){
this.currentPageNum = currentPageNum;
this.totalRecords = totalRecords;
this.pageSize=pageSize;
//计算查询记录的开始索引
startIndex = (currentPageNum-1)*pageSize;
//计算总页数
totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
startPage = currentPageNum - 4; //5
endPage = currentPageNum + 4; //13
if(totalPageNum>9){
if(startPage < 1){
startPage = 1;
endPage = startPage+8;
}
if(endPage>totalPageNum){
endPage = totalPageNum;
startPage = endPage-8;
}
}else{
startPage = 1;
endPage = totalPageNum;
}
}
点击下一页事件的代码
public int getNextPageNum() {
nextPageNum = currentPageNum+1;
if(nextPageNum>totalPageNum){
nextPageNum = totalPageNum;
}
return nextPageNum;
}
点击上一页事件的代码
public int getPrePageNum() {
prePageNum = currentPageNum-1;
if(prePageNum<1){
prePageNum = 1;
}
return prePageNum;
}
然后就可以根据这戏数据轻松愉快的查询数据了并且处理后返回给前台,这些代码太简单就不写了,主要是分页原理和逻辑分析。
有什么写到不对的地方见谅,这仅仅是我的理解,或者可以在下方帮忙纠正。文章很短都是精华。