论坛首页 Java企业应用论坛

一个通用的分页方法

浏览 15806 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-07  

一个通用的分页方法,不仅在数据库操作上分页了还在上层也做了分页.理解了这个就很容易理解其他框架的分页了.

java 代码
  1. import  java.math. * ;   
  2.   
  3. public   class  Pager   {   
  4.      private   int  totalRows;  // 总行数    
  5.      private   int  pageSize=30 ;  // 每页显示的行数    
  6.      private   int  currentPage;  // 当前页号    
  7.      private   int  totalPages;  // 总页数    
  8.      private   int  startRow;  // 当前页在数据库中的起始行    
  9.        
  10.     public  Pager()   {   
  11.            
  12.    }    
  13.       
  14.     public  Pager( int  _totalRows)   {   
  15.        totalRows=_totalRows;   
  16.        totalPages=totalRows / pageSize;   
  17.         int  mod=totalRows % pageSize;   
  18.         if (mod > 0 )  {   
  19.            totalPages ++ ;   
  20.        }    
  21.        currentPage=1 ;   
  22.        startRow=0 ;   
  23.    }    
  24.       
  25.     public   int  getStartRow()   {   
  26.         return  startRow;   
  27.    }    
  28.      public   int  getTotalPages()   {   
  29.         return  totalPages;   
  30.    }    
  31.      public   int  getCurrentPage()   {   
  32.         return  currentPage;   
  33.    }    
  34.      public   int  getPageSize()   {   
  35.         return  pageSize;   
  36.    }    
  37.      public   void  setTotalRows( int  totalRows)   {   
  38.         this.totalRows  =  totalRows;   
  39.    }    
  40.      public   void  setStartRow( int  startRow)   {   
  41.         this.startRow  =  startRow;   
  42.    }    
  43.      public   void  setTotalPages( int  totalPages)   {   
  44.         this.totalPages  =  totalPages;   
  45.    }    
  46.      public   void  setCurrentPage( int  currentPage)   {   
  47.         this.currentPage  =  currentPage;   
  48.    }    
  49.      public   void  setPageSize( int  pageSize)   {   
  50.         this.pageSize  =  pageSize;   
  51.    }    
  52.      public   int  getTotalRows()   {   
  53.         return  totalRows;   
  54.    }    
  55.      public   void  first()   {   
  56.        currentPage  =   1 ;   
  57.        startRow  =   0 ;   
  58.    }    
  59.      public   void  previous()   {   
  60.         if  (currentPage  ==   1 )   {   
  61.             return ;   
  62.        }    
  63.        currentPage -- ;   
  64.        startRow =(currentPage-1)*pageSize;   
  65.    }    
  66.      public   void  next()   {   
  67.         if  (currentPage<totalPages)   {   
  68.            currentPage ++ ;   
  69.        }    
  70.        startRow=(currentPage-1)*pageSize;   
  71.    }    
  72.      public void last()   {   
  73.        currentPage=totalPages;   
  74.        startRow=(currentPage-1 )*pageSize;   
  75.    }    
  76.      public void refresh(int  _currentPage)   {   
  77.        currentPage=_currentPage;   
  78.         if  (currentPage>totalPages)   {   
  79.            last();   
  80.        }    
  81.    }    
  82. }    
  83.   

 操作pager的PagerService

java 代码
  1. package com.game.common;   
  2.   
  3. public   class  PagerService   {   
  4.        
  5.        
  6.        
  7.     public  Pager getPager(String currentPage,String pagerMethod, int  totalRows)   {   
  8.         //     定义pager对象,用于传到页面    
  9.         Pager pager= new  Pager(totalRows);   
  10.         //     如果当前页号为空,表示为首次查询该页   
  11.         //     如果不为空,则刷新pager对象,输入当前页号等信息    
  12.           if  (currentPage!=null )   {   
  13.            pager.refresh(Integer.parseInt(currentPage));   
  14.        }    
  15.         //     获取当前执行的方法,首页,前一页,后一页,尾页。    
  16.           if  (pagerMethod!=null )   {   
  17.             if  (pagerMethod.equals("first"))   {   
  18.                pager.first();   
  19.            }   else   if  (pagerMethod.equals("previous"))   {   
  20.                pager.previous();   
  21.            }   else   if  (pagerMethod.equals("next"))   {   
  22.                pager.next();   
  23.            }   else   if  (pagerMethod.equals("last"))   {   
  24.                pager.last();   
  25.            }    
  26.        }    
  27.         return  pager;   
  28.    }    
  29. }    
  30.   
java 代码
  1. public class ProductsDaoImp extends HibernateDaoSupport implements ProductsDao {   
  2.   
  3.     public int getRows() {   
  4.            
  5.         String sql = " FROM Products ORDER BY gameNameCn " ;   
  6.         List list = this .getHibernateTemplate().find(sql);   
  7.          return  list.size();   
  8.   
  9.     }   
  10.   
  11.     public void addProduct(Products pd) {   
  12.         this.getHibernateTemplate().save(pd);   
  13.   
  14.     }   
  15.   
  16.     public void deleteProduct(Products pd) {   
  17.     this.getHibernateTemplate().delete(pd);   
  18.   
  19.     }   
  20.   
  21.     public String getMaxId() {   
  22.         String sql="select max(gameId)+1 from Products";   
  23.          String  noStr=null;   
  24.          List  list=(List)this.getHibernateTemplate().find(sql);   
  25.          Iterator  it=list.iterator();   
  26.          if(it.hasNext()){   
  27.             Object noInt=it.next();   
  28.             if(noInt==null){   
  29.                 noStr="1";   
  30.             }else{   
  31.                 noStr=noInt.toString();   
  32.             }   
  33.   
  34.          }   
  35.          if(noStr.length()==1){   
  36.              noStr="000"+noStr;   
  37.          }else if(noStr.length()==2){   
  38.              noStr="00"+noStr;   
  39.          }else if(noStr.length()==2){   
  40.              noStr="0"+noStr;   
  41.          } else {   
  42.              noStr=noStr;   
  43.          }   
  44.        
  45.         return noStr;   
  46.     }   
  47.   
  48.     public List getProducts() {   
  49.         String hql="from products order by gameNameCn";   
  50.         this.getHibernateTemplate().find(hql);   
  51.         return null;   
  52.     }   
  53.   
  54.     public List getProducts(final int pageSize, final int startRow) {   
  55.             
  56.         return this.getHibernateTemplate().executeFind(new HibernateCallback(){   
  57.   
  58.             public Object doInHibernate(Session session ) throws HibernateException, SQLException {   
  59.                 Query query=session.createQuery("from products order by gameNameCn");   
  60.                  query.setFirstResult(startRow);   
  61.                    
  62.                   query.setMaxResults(pageSize);   
  63.                 return query.list();   
  64.             }   
  65.                 
  66.          });    
  67.            
  68.     }   
  69.   
  70.     public Products getProducts(int gameId) {   
  71.         return (Products)this.getHibernateTemplate().get(Products.class, gameId);   
  72.             
  73.     }   
  74.   
  75.     public int getRows(String fieldName, String value) {   
  76.         
  77.         String sql = " FROM Products where  " + fieldName + "  like '% " + value + " %' " + " ORDER BY gameNameCn " ;   
  78.         List list = this .getHibernateTemplate().find(sql);   
  79.          return  list.size();   
  80.     }   
  81.   
  82.     public List queryProducts(String fieldName, String value) {   
  83.         String sql = "FROM Products where" + fieldName + "like'%" + value + "%' " + "ORDER BY gameNameCn" ;   
  84.   
  85.         return this.getHibernateTemplate().find(sql);   
  86.     }   
  87.   
  88.     public List queryProducts(String fieldName,  String value, final int pageSize,   
  89.             final   int startRow) {   
  90.         final  String sql = " FROM Products where  " + fieldName+ "  like '% " + value + " %' " + " ORDER BY gameNameCn " ;   
  91.         return this.getHibernateTemplate().executeFind(new HibernateCallback(){   
  92.            
  93.   
  94.             public Object doInHibernate(Session session ) throws HibernateException, SQLException {   
  95.                 Query query=session.createQuery(sql);   
  96.                  query.setFirstResult(startRow);   
  97.                    
  98.                   query.setMaxResults(pageSize);   
  99.                 return query.list();   
  100.             }   
  101.                 
  102.          });    
  103.            
  104.        
  105.     }   
  106.   
  107.     public void updateProductd(Products pd) {   
  108.           this.getHibernateTemplate().update(pd);   
  109.     }   
  110.   
  111. }   
   发表时间:2007-09-07  
好像不怎么通用吧,每一个业务对象的DAO不是都要实现一段分页代码?
而且我个人认为find出List在用list.size的方法应该不是一个好办法
0 请登录后投票
   发表时间:2007-09-07  
hibernate提供了获得当前页面记录的方法。
而且不觉得这么通用。
0 请登录后投票
   发表时间:2007-09-07  
大家有什么好的分页分享一下不?
0 请登录后投票
   发表时间:2008-08-10  
太感谢了,这正是我需要的         
0 请登录后投票
   发表时间:2008-08-10  
List list = this .getHibernateTemplate().find(sql);   
         return  list.size();  
效率太低了。分页没什么意识。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics