hibernate 的分页

本文介绍了一个简单的Hibernate分页查询实现方案,通过自定义Page类来处理分页逻辑,并提供了检查是否有下一页或上一页的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在hibernate论坛上面找的,非常的简单

public class Page {
  
   private List results;    //每页显示的内容
   private int pageSize; // 每页显示的行数
   private int page; // 第几页
   
   public Page(Query query, int page, int pageSize) {
      
       this.page = page;
       this.pageSize = pageSize;
       results = query.setFirstResult(page * pageSize)
           .setMaxResults(pageSize+1)
           .list();
  
   }
  
   public boolean isNextPage() {
       return results.size() > pageSize;
   }
  
   public boolean isPreviousPage() {
       return page > 0;
   }
  
   public List getList() {
       return isNextPage() ?
           results.subList(0, pageSize-1) :
           results;
   }

}
You can return this object to your JSP, and use it in Struts, WebWork or JSTL tags. Getting a page in your persistence logic is as simple as:


public Page getPosts(int page) {
    return new Page(
        session.createQuery("from Posts p order by p.date desc")
        page,
        40
    );
}
The Page class works in both Hibernate and EJB 3.0
 出处http://blog.hibernate.org/Bloggers/Everyone/Year/2004/Month/08/Day/14#pagination

这个程序有个小bug,在java的文档中subList(int fromIndex,     int toIndex)方法是这样说明的

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.)

意思是返回LIst中从fromIndex到toIndex的部分,包括fromIndex这个位置的元素,不包括toIndex这个位置的元素。 所以在   public List getList() {
       return isNextPage() ?
           results.subList(0, pageSize-1) :
           results;
   }

这个方法中不需要pageSize-1

直接这个方法就好了 

public List getList() {
    return isNextPage() ?
      results.subList(0, pageSize) :
       results;
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值