hibernate中的分页查询 请高手指点..

zhouzongxi 2008-06-05 01:13:14

//first表示起始位置,pageSize表示每页显示多少记录
public static void pagenate( int first ,int pageSize){
int i;
Session session=HibernateSessionFactory.getSession();
String hql="from student";
String hql1="select count(*) from student";//查询有多少记录
Query query =session.createQuery(hql1);
List list=query.list();
int count=((Integer)list.get(0)).intValue();
int pageCount=(count+pageSize-1)/pageSize;//这里不明白为什么要-1,谁能解释下。谢谢了!
Query query2=session.createQuery(hql);
for(i=first ;i<pageCount;i++)
{
query2.setFirstResult(first*pageSize);
query2.setMaxResults(pageSize);
List list1=query2.list();
Iterator it=list1.iterator();
while(it.hasNext()){

student stu=(student)it.next();
System.out.println(stu.getSno()+"\t"+stu.getSaddress());
}
}

}
...全文
229 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
showmeccc 2008-12-10
  • 打赏
  • 举报
回复
........看了..喷血了..
zhouzongxi 2008-06-05
  • 打赏
  • 举报
回复
按公式带入数据我会理解 ,有人能推导下么 为什么不能-2,-3 一定要减1 。谢谢各位啦。
晚上结贴!
carnation003 2008-06-05
  • 打赏
  • 举报
回复
count:总记录数
pageSize:每页记录数
直接用count/pageSize无法判断实际页数。
例:10/5=2,6/5=1
上例中的总页数都应为2页,但6/5会得到不正的答案。

{count+pageSize-1)/pageSize就不同了,
相当于在原总记录数+不大于页数的最大值(加上了不到一页的记录数),
这时再除以pageSize就可以判断整分页和count/pageSize不能整除的情况了。
例:(10+(5-1))/5=2,(6+(5-1))/5=2
zhaoyongling721 2008-06-05
  • 打赏
  • 举报
回复
int pageCount=(count+pageSize-1)/pageSize

不要想成-1 想成(count+(pageSize-1)) 如果pageSize=10的话 那就是10进制的,然后为了保证有最有一页,所以要在count后面加(pageSize-1)=9,再除pageSize会得到正确的页数
burningice44 2008-06-05
  • 打赏
  • 举报
回复
int pageCount=(count+pageSize-1)/pageSize;

我理解另一种,根据数学知识,以上可以写成:
int pageCount=(count-1)/pageSize + 1;

其实是这样 总条数/每页的条数 就是页数,但是在程序中的除法运算
它只取整数的那部分,所以如果比方说得到了个2.4,那么它会认为是2,所以
后面加1;但你再想如果正好得到了个整数呢,比方说得到了个3,那么后面再加1
就多出了一页,所以为了让前面 除得的结果还是比得到的整数小1,那么让它的总
条数少1,得到的页数自然就少1,后面又将页数加1,得到的结果正好。

不知你看明白没
yami251139 2008-06-05
  • 打赏
  • 举报
回复
int pageCount=(count+pageSize-1)/pageSize;//这里不明白为什么要-1,谁能解释下。谢谢了!
count是list的第一条数据
pageSize是页面显示数
+起来当然要-1
不然的话页面显示会多出条记录的
如果页面设定了最大显示数,会出错的
  • 打赏
  • 举报
回复
我的是日文操作系统 汉字不对哈

获得当前叶面信息可不得从树祖里-1么?
carnation003 2008-06-05
  • 打赏
  • 举报
回复
pageSize-1:小于页记录数的最大值。

总记录数加上它可以使:
count整除pageSize的时候,整除运算结果不受影响;
count不能整除pageSize时,使余数+小于页记录数的最大值>页记录数的最大值,进位(同时进位数不会>1),这样再整除,实现了在此种情况下分页操作时最后n条记录也需占用一页的效果。
zhaoyongling721 2008-06-05
  • 打赏
  • 举报
回复
int pageCount=(count+pageSize-1)/pageSize

不要想成-1 想成(count+(pageSize-1)) 如果pageSize=10的话 那就是10进制的,然后为了保证有最有一页,所以要在count后面加(pageSize-1)=9,再除pageSize会得到正确的页数


lz不看我回的帖子。

如果是count=1的话如果加了(pageSize-1)=9的话不就可以进一位了么?然后再去除以十就可以得到1了阿

如果pageSize =16的话你就当作是16进制的撒

加上(pageSize-1)=15是为了保证当count为只比16的倍数多1的情况下可以进上一位,多出不满条的那页

而在count在只差一个就是16的倍数的情况下,又能保证count+15除以pageSize 时页数不会多,因为除了之后只取正数部分。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧