分页有两种情况
1、每回点击下页时,才会和数据库交互,把那页的内容
从数据库中取出来,显示在页面上。
2、第一次查询的时候,就会从数据库中把所有相关的
内容全部取出来,放入内存中(list集合),每点击下一页
的时候,从内存中把数据取出来,显示在页面上。
使用两种分页技术的范围
当数据库中相关的数据比较少的情况下,我们采用
第二种分页技术。
当数据库中相关的数据比较多的情况下,我们采用
第一种分页技术。
第一种分页技术的好处:
处理数据量比较大时候
通过网络传输的数据量是比较少
对内存资源的消耗是比较少的
不好的地方
显示的速率比较慢
第二种分页技术的好处:
处理数据量比较小的情况
显示的速率要快
不好的地方
通过网络传输的数据是很大的
对内存资源的消耗也很大
主要是封装DataList类
class DataList{
//放当前页面的数据集合
private List list;//放数据的集合
//存放在数据库中数据的总数量
private int count;
//总页数
private int pageNos;
//每页所显示纪录的条数
private int pageCount=5;
//当前页
private int currentPage;
//控制位
private int flag;
flag=0;表示初始化DataList的对象,显示
第一页的内容
flag=1;表示首页
flag=2;表示下一页
flag=3;表示上一页
flag=4;表示尾页
flag=5;表示直接跳转到第几页
//控制量最终控制的是currentPage
//数据库中的所有数据
private List list;
}
class Action{
String flag=request.getParameter("flag");
String currentPage=
request.getParameter("currentPage");
DataList list=
request.getSession.getAttrutibute("list",datalist);
if(flag==0){
DataList datalist=
new DataList();
datalist.setCurrentPage(1);
datalist=IService.page(datalist);
}else{
if(flag==5)
datalist.setCurrentPage(currentPage);
datalist=IService.page(datalist);
}
request.getSession.setAttrutibute("list",datalist);
return new
ActionForward("");
}
/matchFriendList.do?flag=5¤tPage=1
class Dao{
//查出我数据库中总记录数
hql="select count(*) from Memberinfo"
int count=query.unquinResult();
//每页我显示的条数
int pageCount=5
//求总页数
if(count%pageCount==0)
int pageNos=count/pageCount;
else
int pageNos=count/pageCount+1;
//显示第一页的内容
//用hibernate求出第一页的内容
query.setFirstResult(0);
query.setMaxResult(pageCount);
//显示第二页的内容
int currentPage=2;
(currentPage-1)*pageCount;
query.setFirstResult((currentPage-1)*pageCount);
query.setMaxResult(pageCount);
}
class Service{
if(flag==0)
DataList list=new DataList();
currentPage=1;
if(flag==1)
currentPage=1;
if(flag==2)
currentPage=currentPage+1;
if(flag==3)
currentPage=currentPage-1;
if(flag==4)
currentPage=pageNos;
if(flag==5)
currentPage=页面上传过来的currentPage
}