实现hibernate分页

时间:2014-03-19 07:26:48

标签: hibernate

在我的应用程序中,我需要在200个中只获得20条记录。之前我从数据库中获取所有记录,并且每当用户输入页码时,或者通过单击导航选项卡,用户可能会获得另一条记录,最初只显示第一页中的前20条记录20条记录。

但是现在我需要最初只从数据库中获取20条记录以及记录总数,然后我才能根据记录总数显示页码。每当用户点击相应的页码时,只需要显示通过点击数据库获取的相应记录

我是hibernate的新手,这就是我提出这个问题的原因

2 个答案:

答案 0 :(得分:4)

可以使用以下两种Query接口方法实现分页。

  query.setFirstResult(2);
  query.setMaxResults(4);

setFirstResult(int startingRecordsFrom):                     借助此方法,我们可以在查询中设置结果,该结果从记录开始。

setMaxResults(int maxRecords):                      借助此方法,我们可以在查询中设置最大结果。

假设您有100条记录,并且您希望仅检索10条记录。你的代码应该是这样的

  final int pageSize =10;
  String hql = "FROM Employee";
  Query query = sess.createQuery(hql);
  query.setFirstResult(updatedStartIndex);
  query.setMaxResults(pageSize);
  List<Employee> employees = query.list();
  updatedStartIndex  =  updatedStartIndex +pageSize;

在这里,您必须在程序中的某个位置维护 updatedStartIndex 变量以用于下一页请求。

希望这是有帮助的

答案 1 :(得分:0)

getHibernateTemplate().execute(new HibernateCallback<List<YourObject>>() {
    public List<YourObject> doInHibernate(Session session) throws HibernateException, SQLException {
        return session.createCriteria(YourObject.class).setMaxResults(resultsPerPage).setFirstResult(offset).list();
    }
});

您还需要一个计数来查看您有多少记录。将该计数除以resultPerPage,您将获得页数。偏移量将是currentPage * resultPerPage - resultPerPage;