經過幾天業餘時間的研究,已經做了一套關於分頁的高效解決方案,所謂的高效,就是在數據庫底層,也做了分頁查詢,因此在進行大數據量的查詢時,速度會很快。如果不做底層的分頁的話,數據量超過5W,速度將會慢的象烏龜一樣。
這套解決方案,是按照MVC的模式來做的,基於STRUTS框架。分爲三個部分,表現層用的是JSP,其中用了JSTL和pager taglib做分頁;控制層就是用的很傳統的Action;底層就用的是Spring+Hibernate。下面分三個部分慢慢說:
一、底層:
底層是基於Spring+Hibernate來做的。在DAO這一層,爲其增加兩個方法,一個方法爲根據HQL語句和條件進行查詢,另外一個方法爲根據HQL語句、條件、開始的記錄位置,共顯示的記錄數進行分頁查詢。底層的分頁查詢用的是Hibernate提供的分頁查詢。
方法體如下所示:
- public List findByCondition(String sql,Object[] parems){
- List result = new ArrayList();
- try{
- result = getHibernateTemplate().find(sql,parems);
- }catch(RuntimeException re){
- re.printStackTrace();
- }
- return result;
- }
- public List findByCondition(String sql,Object[] parems,int first,int max){
- List result = new ArrayList();
- try{
- Session sess = getSession();
- Query query = sess.createQuery(sql);
- for(int i = 0;i<parems.length;i++){
- if(parems[i] instanceof Integer){
- query.setInteger(i,((Integer)parems[i]).intValue());
- }
- if(parems[i] instanceof String){
- query.setString(i,parems[i].toString());
- }
- }
- query.setFirstResult(first);
- query.setMaxResults(max);
- result = query.list();
- }catch(RuntimeException re){
- re.printStackTrace();
- }
- return result;
- }