用Hibernate如何对数据进行分页
请大家帮忙,用Hibernate技术分页,sql语句怎么写,我的预期目标是每页显示5条记录,共n页,但是用 Hibernate操作数据库的代码不会,希望大家给予提示
------解决方案--------------------大致说一下思想:
hibernate中的query提供setFirstResult和setMaxResult方法,这样就可以保证查询出某一区间的记录。接下来可以封装一个vo,记录当前的页数,页码,并提供first,previous,next,last方法分别表示第一页,上一页,下一页,末页(其实这里只是设置当前的firstResult的值),具体的四个方法得到action中去写(如果你用struts的话)。核心就是query支持的区间查询,其实底层是limit ?(mysql中是这样的),希望对你有帮助
------解决方案--------------------Query query = session.createQuery(hql);
query.setFirstResult() 设定起始页
query.setMaxResults() 设定每页多少条,你说的5条
List l = query.list(); 把查询得到的记录放入List中
l.size() 可得出总记录数
基本就这些了,要计算多少页,前一页,后一页lz稍微想想就知了
------解决方案--------------------public class Page {
public static final int DEFAULT_PAGE_SIZE = 10;
private int pageIndex; //当前第几页
private int pageSize; //一页显示几条
private int totalCount; //总共多少条
private int pageCount; //总共多少页
public Page(int pageIndex, int pageSize) {
if(pageIndex<1)
pageIndex = 1;
if(pageSize<1)
pageSize = 1;
this.pageIndex = pageIndex;
this.pageSize = pageSize;
}
public Page(int pageIndex) {
this(pageIndex, DEFAULT_PAGE_SIZE);
}
public int getPageIndex() { return pageIndex; }
public int getPageSize() { return pageSize; }
public int getPageCount() { return pageCount; }
public int getTotalCount() { return totalCount; }
public int getFirstResult() { return (pageIndex-1)*pageSize; }
public boolean getHasPrevious() { return pageIndex>1; }
public boolean getHasNext() { return pageIndex<pageCount; }
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
pageCount = totalCount / pageSize + (totalCount%pageSize==0 ? 0 : 1);
if(totalCount==0) {
if(pageIndex!=1)
throw new
IndexOutOfBoundsException("Page index out of range.");
}
else {
if(pageIndex>pageCount)
throw new IndexOutOfBoundsException("Page index out of range.");
}
}
public boolean isEmpty() {
return totalCount==0;
}
}
page 类
protected List queryForList(final String select, final Object[] values, final Page page) {
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.setFirstResult(page.getFirstResult())
.setMaxResults(page.getPageSize())
.list();
}
};
return (List) hibernateTemplate.executeFind(selectCallback);
}
根据page查询