Hibernate分页查询数据量几万条以上的时候,狂慢!没反应最后报错,怎样解决?
我测试了,数据量几千条时,查询前三四页勉强凑合(还是有点慢),到第四、五页的时候再点下一页就没反应了,数据量几万条以上时查询时间很慢很慢(几分钟以上,没数据显示,最后报错)
报错:java.lang.OutOfMemoryError: Java heap space
SSH,Server2005,Eclipse,tomcat
DAO类代码:
public List getAllGuestBooks(){
return getHibernateTemplate().find("from GuestBook order by id desc");
//用下面方法查询速度依然很慢
// Session session = this.getSession();
// Query query = session.createQuery("from GuestBook");
// query.setFirstResult(0);
// query.setMaxResults(100000);
// List list = query.list();
// //Iterator it = list.iterator();
// return list;
}
调用上面方法:
/**
* 查找全部记录*/
public List getAllGuestBooks(){
return this.guestBookDAO.getAllGuestBooks();
}
/**
* 分页显示数据 * retuen 页数
* pageNum 每页显示数量*/
public int pageCount(int pageNum){
int count = this.getAllGuestBooks().size();
return count%pageNum==0?count/pageNum:count/pageNum+1;
}
Action调用:
/**
* 登陆后显示数据
* */
public ActionForward admin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm guestBookForm = (DynaActionForm) form;// TODO Auto-generated method stub
HttpSession session = request.getSession();
if(LoginAction.validate(request)==false){
return mapping.findForward("guestbook.admin.login");
}
System.out.println("admin");
//得到页的下标
String pageIndex = request.getParameter("pageIndex"); int pageNum = 0;
if(pageIndex == "" || pageIndex==null){
pageNum = 0;
}else{
pageNum = Integer.parseInt(pageIndex);
}
int count = this.guestBookBiz.pageCount(10);//页数
session.setAttribute("pageNum", pageIndex);
session.setAttribute("count", String.valueOf(count));
List list = this.guestBookBiz.getAllGuestBooks();
request.setAttribute("list", list); request.setAttribute("listSize", String.valueOf(list.size()));
return mapping.findForward("guestbook.admin");
}
jsp页面:
<logic:equal value="0" name="pageNum">
首页
</logic:equal>
<logic:notEqual value="0" name="pageNum">
<a href="${pageContext.request.contextPath }/guestBook.do?method=admin&pageIndex=0">首页</a>
</logic:notEqual>
<logic:equal value="0" name="pageNum">
上一页
</logic:equal>
<logic:notEqual value="0" name="pageNum">
<a href="${pageContext.request.contextPath }/guestBook.do?method=admin&pageIndex=${pageNum-1 }">上一页</a>
</logic:notEqual>
<logic:equal value="${count-1}" name="pageNum">
下一页
</logic:equal>
<logic:notEqual value="${count-1}" name="pageNum">
<a href="${pageContext.request.contextPath }/guestBook.do?method=admin&pageIndex=${pageNum+1 }">下一页</a>
</logic:notEqual>
<logic:notEqual value="${count-1}" name="pageNum">
<a href="${pageContext.request.contextPath }/guestBook.do?method=admin&pageIndex=${count-1 }">尾页</a>
</logic:notEqual>
<logic:equal value="${count-1}" name="pageNum">尾页</logic:equal>
每行显示10条
<logic:iterate id="guestBook" name="list" length="10" offset="${pageNum*10}">
<table>
<tr>
<td>
${guestBook.name} ${guestBook.time}说: ${guestBook.title}</td>
<td>${guestBook.email} td>
<td>${guestBook.url} /td>
</tr>
<tr>
<td colspan="3">${guestBook.context} </td>
</tr>
</table>
</logic:iterate>