实施hibernate分页

Implementing hibernate pagination

在我的应用程序中,我只需要获取200条记录中的20条记录。以前,我是从数据库中获取所有记录的,最初只要用户输入页码或单击导航选项卡,第一页就只显示前20条记录,用户可能会获得另一条记录20条记录。

但是现在我最初只需要从数据库中获取20条记录,还需要获取记录总数,那么只有我可以根据记录总数显示页码。每当用户单击相应的页码时,只需要显示相应的记录即可,这些记录是通过点击数据库来获取的。

我刚Hibernate,这就是为什么我问这个问题


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

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

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

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

假设您有100条记录,而您只希望检索10条记录。您的代码应该是这样的

1
2
3
4
5
6
7
  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;

在这里,您必须在程序中的某个位置维护您的updateStartIndex变量,以便进行下一页请求。

希望这会有所帮助


1
2
3
4
5
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;