wj603201 发表于 2013-2-6 11:09:25

应用Hibernate3的DetachedCriteria实现分页查询

java 代码
importjava.math. * ;   
   
public   classPager   {   
   private   inttotalRows;// 总行数   
   private   intpageSize=30 ;// 每页显示的行数   
   private   intcurrentPage;// 当前页号   
   private   inttotalPages;// 总页数   
   private   intstartRow;// 当前页在数据库中的起始行   
      
    publicPager()   {   
            
   }   
      
    publicPager( int_totalRows)   {   
       totalRows=_totalRows;   
       totalPages=totalRows / pageSize;   
      intmod=totalRows % pageSize;   
      if (mod > 0 ){   
         totalPages ++ ;   
       }   
       currentPage=1 ;   
       startRow=0 ;   
   }   
      
    public   intgetStartRow()   {   
      returnstartRow;   
   }   
   public   intgetTotalPages()   {   
      returntotalPages;   
   }   
   public   intgetCurrentPage()   {   
      returncurrentPage;   
   }   
   public   intgetPageSize()   {   
      returnpageSize;   
   }   
   public   voidsetTotalRows( inttotalRows)   {   
      this.totalRows=totalRows;   
   }   
   public   voidsetStartRow( intstartRow)   {   
      this.startRow=startRow;   
   }   
   public   voidsetTotalPages( inttotalPages)   {   
      this.totalPages=totalPages;   
   }   
   public   voidsetCurrentPage( intcurrentPage)   {   
      this.currentPage=currentPage;   
   }   
   public   voidsetPageSize( intpageSize)   {   
      this.pageSize=pageSize;   
   }   
   public   intgetTotalRows()   {   
      returntotalRows;   
   }   
   public   voidfirst()   {   
       currentPage=   1 ;   
       startRow=   0 ;   
   }   
   public   voidprevious()   {   
      if(currentPage==   1 )   {   
            return ;   
       }   
       currentPage -- ;   
       startRow =(currentPage-1)*pageSize;   
   }   
   public   voidnext()   {   
      if(currentPage<totalPages)   {   
         currentPage ++ ;   
       }   
       startRow=(currentPage-1)*pageSize;   
   }   
   public void last()   {   
       currentPage=totalPages;   
       startRow=(currentPage-1 )*pageSize;   
   }   
   public void refresh(int_currentPage)   {   
       currentPage=_currentPage;   
      if(currentPage>totalPages)   {   
         last();   
       }   
   }   
}   
   

操作pager的PagerService

java 代码
package com.game.common;   
   
public   classPagerService   {   
      
      
      
    publicPager getPager(String currentPage,String pagerMethod, inttotalRows)   {   
      //   定义pager对象,用于传到页面   
      Pager pager= newPager(totalRows);   
      //   如果当前页号为空,表示为首次查询该页   
      //   如果不为空,则刷新pager对象,输入当前页号等信息   
          if(currentPage!=null )   {   
         pager.refresh(Integer.parseInt(currentPage));   
       }   
      //   获取当前执行的方法,首页,前一页,后一页,尾页。   
          if(pagerMethod!=null )   {   
            if(pagerMethod.equals("first"))   {   
               pager.first();   
         }   else   if(pagerMethod.equals("previous"))   {   
               pager.previous();   
         }   else   if(pagerMethod.equals("next"))   {   
               pager.next();   
         }   else   if(pagerMethod.equals("last"))   {   
               pager.last();   
         }   
       }   
      returnpager;   
   }   
}   
   

java 代码
public class ProductsDaoImp extends HibernateDaoSupport implements ProductsDao {   
   
    public int getRows() {   
            
      String sql = " FROM Products ORDER BY gameNameCn " ;   
      List list = this .getHibernateTemplate().find(sql);   
         returnlist.size();   
   
    }   
   
    public void addProduct(Products pd) {   
      this.getHibernateTemplate().save(pd);   
   
    }   
   
    public void deleteProduct(Products pd) {   
    this.getHibernateTemplate().delete(pd);   
   
    }   
   
    public String getMaxId() {   
      String sql="select max(gameId)+1 from Products";   
         StringnoStr=null;   
         Listlist=(List)this.getHibernateTemplate().find(sql);   
         Iteratorit=list.iterator();   
         if(it.hasNext()){   
            Object noInt=it.next();   
            if(noInt==null){   
                noStr="1";   
            }else{   
                noStr=noInt.toString();   
            }   
   
         }   
         if(noStr.length()==1){   
             noStr="000"+noStr;   
         }else if(noStr.length()==2){   
             noStr="00"+noStr;   
         }else if(noStr.length()==2){   
             noStr="0"+noStr;   
         } else {   
             noStr=noStr;   
         }   
      
      return noStr;   
    }   
   
    public List getProducts() {   
      String hql="from products order by gameNameCn";   
      this.getHibernateTemplate().find(hql);   
      return null;   
    }   
   
    public List getProducts(final int pageSize, final int startRow) {   
            
      return this.getHibernateTemplate().executeFind(new HibernateCallback(){   
   
            public Object doInHibernate(Session session ) throws HibernateException, SQLException {   
                Query query=session.createQuery("from products order by gameNameCn");   
               query.setFirstResult(startRow);   
                  
                  query.setMaxResults(pageSize);   
                return query.list();   
            }   
               
         });   
            
    }   
   
    public Products getProducts(int gameId) {   
      return (Products)this.getHibernateTemplate().get(Products.class, gameId);   
            
    }   
   
    public int getRows(String fieldName, String value) {   
         
      String sql = " FROM Products where" + fieldName + "like '% " + value + " %' " + " ORDER BY gameNameCn " ;   
      List list = this .getHibernateTemplate().find(sql);   
         returnlist.size();   
    }   
   
    public List queryProducts(String fieldName, String value) {   
      String sql = "FROM Products where" + fieldName + "like'%" + value + "%' " + "ORDER BY gameNameCn" ;   
   
      return this.getHibernateTemplate().find(sql);   
    }   
   
    public List queryProducts(String fieldName,String value, final int pageSize,   
            final   int startRow) {   
      finalString sql = " FROM Products where" + fieldName+ "like '% " + value + " %' " + " ORDER BY gameNameCn " ;   
      return this.getHibernateTemplate().executeFind(new HibernateCallback(){   
            
   
            public Object doInHibernate(Session session ) throws HibernateException, SQLException {   
                Query query=session.createQuery(sql);   
               query.setFirstResult(startRow);   
                  
                  query.setMaxResults(pageSize);   
                return query.list();   
            }   
               
         });   
            
      
    }   
   
    public void updateProductd(Products pd) {   
          this.getHibernateTemplate().update(pd);   
    }   
   
}   



public List findAll()...{
      
      String sql="FROM Author order by author_id";
      return getHibernateTemplate().find(sql);
    }

public List findAllByPage( final int pageNow, final int pageSize)...{

List list = (List) getHibernateTemplate().execute(
            new HibernateCallback() ...{
                int size=pageNow*pageSize-pageSize;
      public Object doInHibernate(Session session)
                throws HibernateException ...{
            Query q =session.createQuery("from Author order by author_id");
             q.setFirstResult(size);
             q.setMaxResults(pageSize);
             List cats = q.list();
            return cats;
      }
    });//内部类,返回一个List
   return list;
    }
然后就是在action里面定义





public int pageNow = 1 ; //初始化为1,默认从第一页开始显示
    public int pageSize =3 ; //每页显示5条记录 并生成get,set方法

public int getPageNow() ...{
      return pageNow;
    }

    public void setPageNow(int pageNow) ...{
      this.pageNow = pageNow;
    }

    public int getPageSize() ...{
      return pageSize;
    }

    public void setPageSize(int pageSize) ...{
      this.pageSize = pageSize;
    } 最后就是前台jsp的调用

<s:url id="url_pre" value="List.action">
         <s:param name="pageNow" value="pageNow-1"></s:param>
         
   </s:url>

   <s:url id="url_next" value="List.action">
         <s:param name="pageNow" value="pageNow+1"></s:param>
   </s:url>



<s:form action="List" theme="simple">
转到第<s:textfield name="pageNow"></s:textfield>页
<span><s:submit value=''GO'' name=''cndok''/></span>
</s:form>

<s:a href="%{url_pre}">上一页</s:a>


   <s:a href="%{url_next}">下一页</s:a>
页: [1]
查看完整版本: 应用Hibernate3的DetachedCriteria实现分页查询