日期:2014-05-17  浏览次数:20641 次

用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查询