posts - 4,  comments - 1,  trackbacks - 0
          /**********************************Page類*********************************************/
          package com.nyhr.struts.page;

          /**
           * 分頁實體類,保存當前分頁狀態(tài)變量
           * @author Yeno.hhr
          */
          public class Page {

              /** imply if the page has previous page */
              private boolean hasPrePage;
            
              /** imply if the page has next page */
              private boolean hasNextPage;
                
              /** the number of every page */
              private int everyPage;
            
              /** the total page number */
              private int totalPage;
             
              /** the total record number */
              private int totalRecords;
                
              /** the number of current page */
              private int currentPage;
            
              /** the begin index of the records by the current query */
              private int beginIndex;
            
            
              /** The default constructor */
              public Page(){
                
              }
            
              /** construct the page by everyPage
               * @param everyPage
               * */
              public Page(int everyPage){
                  this.everyPage = everyPage;
              }
            
              /** The whole constructor */
              public Page(boolean hasPrePage, boolean hasNextPage,
                              int everyPage, int totalPage, int totalRecords,
                              int currentPage, int beginIndex) {
                  this.hasPrePage = hasPrePage;
                  this.hasNextPage = hasNextPage;
                  this.everyPage = everyPage;
                  this.totalPage = totalPage;
                  this.totalRecords = totalRecords;
                  this.currentPage = currentPage;
                  this.beginIndex = beginIndex;
              }

              /**
               * @return
               * Returns the beginIndex.
               */
              public int getBeginIndex() {
                  return beginIndex;
              }
            
              /**
               * @param beginIndex
               * The beginIndex to set.
               */
              public void setBeginIndex(int beginIndex) {
                  this.beginIndex = beginIndex;
              }
            
              /**
               * @return
               * Returns the currentPage.
               */
              public int getCurrentPage() {
                  return currentPage;
              }
            
              /**
               * @param currentPage
               * The currentPage to set.
               */
              public void setCurrentPage(int currentPage) {
                  this.currentPage = currentPage;
              }
            
              /**
               * @return
               * Returns the everyPage.
               */
              public int getEveryPage() {
                  return everyPage;
              }
            
              /**
               * @param everyPage
               * The everyPage to set.
               */
              public void setEveryPage(int everyPage) {
                  this.everyPage = everyPage;
              }
            
              /**
               * @return
               * Returns the hasNextPage.
               */
              public boolean getHasNextPage() {
                  return hasNextPage;
              }
            
              /**
               * @param hasNextPage
               * The hasNextPage to set.
               */
              public void setHasNextPage(boolean hasNextPage) {
                  this.hasNextPage = hasNextPage;
              }
            
              /**
               * @return
               * Returns the hasPrePage.
               */
              public boolean getHasPrePage() {
                  return hasPrePage;
              }
            
              /**
               * @param hasPrePage
               * The hasPrePage to set.
               */
              public void setHasPrePage(boolean hasPrePage) {
                  this.hasPrePage = hasPrePage;
              }
            
              /**
               * @return Returns the totalPage.
               *
               */
              public int getTotalPage() {
                  return totalPage;
              }
            
              /**
               * @param totalPage
               * The totalPage to set.
               */
              public void setTotalPage(int totalPage) {
                  this.totalPage = totalPage;
              }
             
              /**
               * @param totalRecords
               * The totalRecords to set.
               */
              public void settotalRecords(int totalRecords)
              {
                  this.totalRecords = totalRecords;
              }
              /**
               * @return Returns the totalRecords.
               *
               */
              public int getTotalRecords()
              {
                  return this.totalRecords;
              }
          }

          /**********************************PageUtil類*********************************************/
          package com.nyhr.struts.page;

          /**
           * 分頁工具類,初始化Page對象
           * @author Yeno.hhr
          */
          public class PageUtil {
               
              /**
               * Use the origin page to create a new page
               * @param page
               * @param totalRecords
               * @return
               */
              public static Page createPage(Page page, int totalRecords){
                  return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
              }
            
              /**
               * the basic page utils not including exception handler
               * @param everyPage
               * @param currentPage
               * @param totalRecords
               * @return page
               */
              public static Page createPage(int everyPage, int currentPage, int totalRecords){
                  everyPage = getEveryPage(everyPage);
                  currentPage = getCurrentPage(currentPage);
                  int beginIndex = getBeginIndex(everyPage, currentPage);
                  int totalPage = getTotalPage(everyPage, totalRecords);
                  boolean hasNextPage = hasNextPage(currentPage, totalPage);
                  boolean hasPrePage = hasPrePage(currentPage);
                
                  return new Page(hasPrePage, hasNextPage,
                                          everyPage, totalPage, totalRecords,
                                          currentPage, beginIndex);
              }
            
              private static int getEveryPage(int everyPage){
                  return everyPage == 0 ? 10 : everyPage;
              }
            
              private static int getCurrentPage(int currentPage){
                  return currentPage == 0 ? 1 : currentPage;
              }
            
              private static int getBeginIndex(int everyPage, int currentPage){
                  return (currentPage - 1) * everyPage;
              }
                
              private static int getTotalPage(int everyPage, int totalRecords){
                  int totalPage = 0;
                        
                  if(totalRecords % everyPage == 0)
                      totalPage = totalRecords / everyPage;
                  else
                      totalPage = totalRecords / everyPage + 1 ;
                        
                  return totalPage;
              }
            
              private static boolean hasPrePage(int currentPage){
                  return currentPage == 1 ? false : true;
              }
            
              private static boolean hasNextPage(int currentPage, int totalPage){
                  return currentPage == totalPage || totalPage == 0 ? false : true;
              }
            

          }

          /**********************************Result類*********************************************/
          package com.nyhr.struts.page;

          import java.util.List;
          /**
           * <p>Title: 檢索結(jié)果集實體類</p>
           * <p>Description: 保存分頁參數(shù)及數(shù)據(jù)庫查詢的結(jié)果,用于頁面顯示</p>
           * <p>Copyright: Copyright (c) 2006</p>
           * <p>Company: 四方人才網(wǎng)</p>
           * @author Yeno.hhr
           * @version 1.0
           */
          public class Result {
              /**分頁狀態(tài)變量實體*/
              private Page page;
              /**數(shù)據(jù)庫檢索到的當前頁結(jié)果集*/
              private List content;

              /**
               * The default constructor
               */
              public Result() {
                  super();
              }

              /**
               * The constructor using fields
               *
               * @param page
               * @param content
               */
              public Result(Page page, List content) {

                  this.page = page;
                  this.content = content;
              }

              /**
               * @return Returns the content.
               */
              public List getContent() {
                  return content;
              }

              /**
               * @return Returns the page.
               */
              public Page getPage() {
                  return page;
              }

              /**
               * The content to set.
               * @param content
               */
              public void setContent(List content) {
                  this.content = content;
              }

              /**
               * The page to set.
               * @param page
               */
              public void setPage(Page page) {
                  this.page = page;
              }
          }
           現(xiàn)在展示在大家面前的是查詢分頁兩個核心類 :AbstractSearch(預查詢初始化程序)、AbstractList(分頁及初始化分頁程序),代碼如下:
          /********************************AbstractSearch類************************************/
          package com.nyhr.struts.frame;

          import java.util.List;

          import com.nyhr.struts.beans.HibernateUtil;
          /**
           * <p>Title: 預查詢初始化程序</p>
           * <p>Description: 所有的初始化查詢必須繼承此類,本類只負責預查詢ID集和Page對象的初始化,不實現(xiàn)顯示邏輯</p>
           * <p>Copyright: Copyright (c) 2006</p>
           * <p>Company: 四方人才網(wǎng)</p>
           * @author Yeno.hhr
           * @version 1.0
           */
          public abstract class AbstractSearch {

              public AbstractSearch()
              {
                  super();
              }
              /**
               * 根據(jù)HQL查詢出記錄的主鍵ID(主索引)集合
               * 注:此hql必須是只檢索主鍵及復合主鍵的查詢語句,具體見應用實例
               * @param hql 不帶查詢的查詢語句
               * @return idArray 主索引集合(可以主鍵ID,也可以是復合ID)
               */
              public Object[] getIDList(String hql)
              {
                  List list = HibernateUtil.query(hql);
                  if (list==null || list.size()==0)
                      return null;
                  return list.toArray();
              }
              /**
               * 根據(jù)HQL查詢出記錄的主鍵ID(主索引)集合
               * 注:此hql必須是只檢索主鍵及復合主鍵的查詢語句,具體見應用實例
               * @param hql 帶參數(shù)的查詢語句
               * @param bean 參數(shù)設置實體類
               * @return Object[] 主索引集合(可以主鍵ID,也可以是復合ID)
               */
              public Object[] getIDList(String hql, Object bean)
              {
                  List list = HibernateUtil.query(hql,bean);
                  if (list==null || list.size()==0)
                      return null;
                  return list.toArray();
              }
              /**子類方法:根據(jù)子類的需要選擇調(diào)用AbstractSearch的“帶參”和“不帶參”兩種查詢中的一種返回主鍵ID的數(shù)組集*/
              abstract public Object[] getList();
              /**子類方法:設定查詢條件*/
              abstract protected void condition();
          }


          /********************************AbstractList類************************************/
          package com.nyhr.struts.frame;

          import com.nyhr.struts.page.*;
          import com.nyhr.struts.constant.SysConstant;
          import com.nyhr.struts.hibernate.HibernateSessionFactory;

          import org.hibernate.HibernateException;
          import org.hibernate.Query;
          import org.hibernate.Session;

          import java.util.List;
          import java.util.ArrayList;
          /**
           * <p>Title: 分頁及初始化分頁程序</p>
           * <p>Description: 所有的初始化分頁必須繼承此類,如果是預查詢調(diào)用,同時會初始化Page實體,否則Page實體會由FormBean提交生成</p>
           * <p>Copyright: Copyright (c) 2006</p>
           * <p>Company: 四方人才網(wǎng)</p>
           * @author Yeno.hhr
           * @version 1.0
           */
          abstract public class AbstractList {
              private Page page;
              /**查詢結(jié)果的主鍵ID集*/
              private Object[] idList;
             
              public AbstractList(){}
              /**
               * 預查詢初始化分頁構(gòu)造(初次查詢)
               * @param hql 查詢語句
               * @param search 預查詢類
               */
              public AbstractList(AbstractSearch search){
                  this.idList=search.getList();
              }
              /**
               * 查詢分頁構(gòu)造(分頁查詢)
               * @param page 分頁狀態(tài)實體
               * @param idList
               */
              public AbstractList(Page page, Object[] idList){
                  this.idList=idList;
                  this.page=page;
              }
              /**子類方法:設置分頁查詢的查詢語句*/
              abstract protected String getHql();
              /**
               * 返回查詢結(jié)果
               * @return Result
               */
              public Result getResult(){
                  if(page==null){
                      if(idList==null)
                          this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);
                      else
                          this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);
                  }
                  return new Result(page, getListByPage());
              }
              /**
               * 分頁查詢,返回當前頁的查詢結(jié)果集
               * @param hql
               * @return list 結(jié)果集
               */
              public List getListByPage(){
                  List list = null;
                  if (page.getTotalPage() < 1)
                      return list;
                  try{
                      String hql=getHql();
                      if(hql==null || hql.equals(""))
                          return list;
                      Object[] bean=getCurrentIds();
                      if(bean!=null)
                          list=HibernateUtil.query(hql,bean);
                      else
                          list=HibernateUtil.query(hql);
                  }catch(Exception e){
                      System.out.println(e.getMessage());
                      throw new RuntimeException(e);
                  }
                  return list;
              }

              /**
               * 從查詢結(jié)果的ID集中找出當前頁的ID集
               * @param arr 所有查詢結(jié)果的主鍵ID集
               * @return Object[]
               */
              private Object[] getCurrentIds(){
                  if(idList==null)    return null;

                  ArrayList<Object> list = new ArrayList<Object>();
                  int begin = page.getBeginIndex();
                  int ends = page.getTotalRecords();
                  int end = begin+page.getEveryPage();
                  if (end >= ends)
                      end = ends;
                  for (int l=begin;l<end;l++){
                      list.add(idList[l]);
                  }       
                  return list.toArray();
              }
              /**
               * 返回查詢結(jié)果主鍵ID集的字符串組合形式
               * @return String
               */
              public String getIdList(){
                  String ids="";
                  if(idList == null)
                      return ids;
                  for(int x=0; x<idList.length; x++){
                      ids+=idList[x].toString();
                      if(x<idList.length-1)
                          ids+=",";
                  }
                  return ids;
              }
          }


          /********************************HibernateUtil類************************************/
          public class HibernateUtil {

              private HibernateUtil(){}  
              /**
               * 執(zhí)行數(shù)據(jù)庫查詢,返回結(jié)果集List
               * @param hsql HSQL查詢語句
               * @return list 結(jié)果集
               */
              public static List query(String hql) {
                  List list = null;
                  Query query = null;     
                  Session sess = HibernateSessionFactory.currentSession();
                  try{
                      //創(chuàng)建一條HQL查詢語句
                      if (hql.toLowerCase().contains("from "))
                          query = sess.createQuery(hql);
                      else
                           query = sess.getNamedQuery(hql);
                     
                      list = query.list();
                     
                  }catch(HibernateException e)  {
                      System.out.println("Hibernate Exception:@"+e.getMessage());
                      throw new RuntimeException(e);
                  }finally {
                      HibernateSessionFactory.closeSession();
                  }
                  return list;
              }
              public static List query(String hql, Object bean){
                  List list = null;
                  Query query = null;
                 
                  Session sess = HibernateSessionFactory.currentSession();
                  try {
                      //創(chuàng)建一條HQL查詢語句
                      if (hql.toLowerCase().contains("from "))
                          query = sess.createQuery(hql);
                      else
                           query = sess.getNamedQuery(hql);
                     
                      query.setProperties(bean);
                      list = query.list();
                  }catch(HibernateException e) {
                      System.out.println("Hibernate Exception:@"+e.getMessage());
                      throw new RuntimeException(e);
                  } finally {
                      HibernateSessionFactory.closeSession();
                  }
                  return list;
              }
          }

          posted on 2007-09-18 08:56 chaochao 閱讀(918) 評論(1)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 同心县| 图们市| 高碑店市| 台北县| 余干县| 赞皇县| 原阳县| 精河县| 博客| 阿荣旗| 安平县| 桃园市| 双流县| 浦江县| 永泰县| 高平市| 仲巴县| 松原市| 青浦区| 柯坪县| 信丰县| 都兰县| 三明市| 蒲江县| 美姑县| 高碑店市| 繁昌县| 临漳县| 方正县| 清镇市| 南溪县| 海丰县| 堆龙德庆县| 昭通市| 宜川县| 长垣县| 大洼县| 额敏县| 天等县| 成都市| 乐陵市|