鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          原文引自:http://forum.javaeye.com/viewtopic.php?t=14657

          Hibernate3提供了DetachedCriteria,使得我們可以在Web層構(gòu)造detachedCriteria,然后調(diào)用業(yè)務(wù)層Bean,進(jìn)行動(dòng)態(tài)條件查詢,根據(jù)這一功能,我設(shè)計(jì)了通用的抽象Bean基類和分頁類支持,代碼來自于Quake Wang的javaeye-core包的相應(yīng)類,然后又做了很多修改。

          分頁支持類:

          java代碼: 


          package com.javaeye.common.util;

          import java.util.List;

          public class PaginationSupport {

                  public final static int PAGESIZE = 30;

                  private int pageSize = PAGESIZE;

                  private List items;

                  private int totalCount;

                  private int[] indexes = new int[0];

                  private int startIndex = 0;

                  public PaginationSupport(List items, int totalCount) {
                          setPageSize(PAGESIZE);
                          setTotalCount(totalCount);
                          setItems(items);               
                          setStartIndex(0);
                  }

                  public PaginationSupport(List items, int totalCount, int startIndex) {
                          setPageSize(PAGESIZE);
                          setTotalCount(totalCount);
                          setItems(items);               
                          setStartIndex(startIndex);
                  }

                  public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) {
                          setPageSize(pageSize);
                          setTotalCount(totalCount);
                          setItems(items);
                          setStartIndex(startIndex);
                  }

                  public List getItems() {
                          return items;
                  }

                  public void setItems(List items) {
                          this.items = items;
                  }

                  public int getPageSize() {
                          return pageSize;
                  }

                  public void setPageSize(int pageSize) {
                          this.pageSize = pageSize;
                  }

                  public int getTotalCount() {
                          return totalCount;
                  }

                  public void setTotalCount(int totalCount) {
                          if (totalCount > 0) {
                                  this.totalCount = totalCount;
                                  int count = totalCount / pageSize;
                                  if (totalCount % pageSize > 0)
                                          count++;
                                  indexes = new int[count];
                                  for (int i = 0; i < count; i++) {
                                          indexes[i] = pageSize * i;
                                  }
                          } else {
                                  this.totalCount = 0;
                          }
                  }

                  public int[] getIndexes() {
                          return indexes;
                  }

                  public void setIndexes(int[] indexes) {
                          this.indexes = indexes;
                  }

                  public int getStartIndex() {
                          return startIndex;
                  }

                  public void setStartIndex(int startIndex) {
                          if (totalCount <= 0)
                                  this.startIndex = 0;
                          else if (startIndex >= totalCount)
                                  this.startIndex = indexes[indexes.length - 1];
                          else if (startIndex < 0)
                                  this.startIndex = 0;
                          else {
                                  this.startIndex = indexes[startIndex / pageSize];
                          }
                  }

                  public int getNextIndex() {
                          int nextIndex = getStartIndex() + pageSize;
                          if (nextIndex >= totalCount)
                                  return getStartIndex();
                          else
                                  return nextIndex;
                  }

                  public int getPreviousIndex() {
                          int previousIndex = getStartIndex() - pageSize;
                          if (previousIndex < 0)
                                  return 0;
                          else
                                  return previousIndex;
                  }

          }



          抽象業(yè)務(wù)類
          java代碼: 


          /**
          * Created on 2005-7-12
          */

          package com.javaeye.common.business;

          import java.io.Serializable;
          import java.util.List;

          import org.hibernate.Criteria;
          import org.hibernate.HibernateException;
          import org.hibernate.Session;
          import org.hibernate.criterion.DetachedCriteria;
          import org.hibernate.criterion.Projections;
          import org.springframework.orm.hibernate3.HibernateCallback;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          import com.javaeye.common.util.PaginationSupport;

          public abstract class AbstractManager extends HibernateDaoSupport {

                  private boolean cacheQueries = false;

                  private String queryCacheRegion;

                  public void setCacheQueries(boolean cacheQueries) {
                          this.cacheQueries = cacheQueries;
                  }

                  public void setQueryCacheRegion(String queryCacheRegion) {
                          this.queryCacheRegion = queryCacheRegion;
                  }

                  public void save(final Object entity) {
                          getHibernateTemplate().save(entity);
                  }

                  public void persist(final Object entity) {
                          getHibernateTemplate().save(entity);
                  }

                  public void update(final Object entity) {
                          getHibernateTemplate().update(entity);
                  }

                  public void delete(final Object entity) {
                          getHibernateTemplate().delete(entity);
                  }

                  public Object load(final Class entity, final Serializable id) {
                          return getHibernateTemplate().load(entity, id);
                  }

                  public Object get(final Class entity, final Serializable id) {
                          return getHibernateTemplate().get(entity, id);
                  }

                  public List findAll(final Class entity) {
                          return getHibernateTemplate().find("from " + entity.getName());
                  }

                  public List findByNamedQuery(final String namedQuery) {
                          return getHibernateTemplate().findByNamedQuery(namedQuery);
                  }

                  public List findByNamedQuery(final String query, final Object parameter) {
                          return getHibernateTemplate().findByNamedQuery(query, parameter);
                  }

                  public List findByNamedQuery(final String query, final Object[] parameters) {
                          return getHibernateTemplate().findByNamedQuery(query, parameters);
                  }

                  public List find(final String query) {
                          return getHibernateTemplate().find(query);
                  }

                  public List find(final String query, final Object parameter) {
                          return getHibernateTemplate().find(query, parameter);
                  }

                  public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) {
                          return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);
                  }

                  public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) {
                          return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);
                  }

                  public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize,
                                  final int startIndex) {
                          return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() {
                                  public Object doInHibernate(Session session) throws HibernateException {
                                          Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                                          int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
                                          criteria.setProjection(null);
                                          List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
                                          PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
                                          return ps;
                                  }
                          }, true);
                  }

                  public List findAllByCriteria(final DetachedCriteria detachedCriteria) {
                          return (List) getHibernateTemplate().execute(new HibernateCallback() {
                                  public Object doInHibernate(Session session) throws HibernateException {
                                          Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                                          return criteria.list();
                                  }
                          }, true);
                  }

                  public int getCountByCriteria(final DetachedCriteria detachedCriteria) {
                          Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() {
                                  public Object doInHibernate(Session session) throws HibernateException {
                                          Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                                          return criteria.setProjection(Projections.rowCount()).uniqueResult();
                                  }
                          }, true);
                          return count.intValue();
                  }
          }




          用戶在web層構(gòu)造查詢條件detachedCriteria,和可選的startIndex,調(diào)用業(yè)務(wù)bean的相應(yīng)findByCriteria方法,返回一個(gè)PaginationSupport的實(shí)例ps。

          ps.getItems()得到已分頁好的結(jié)果集
          ps.getIndexes()得到分頁索引的數(shù)組
          ps.getTotalCount()得到總結(jié)果數(shù)
          ps.getStartIndex()當(dāng)前分頁索引
          ps.getNextIndex()下一頁索引
          ps.getPreviousIndex()上一頁索引
          posted on 2006-02-10 08:51 TrampEagle 閱讀(4791) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 南投县| 旬邑县| 祁东县| 昆山市| 临江市| 苏尼特右旗| 法库县| 阳谷县| 彩票| 红桥区| 府谷县| 攀枝花市| 马边| 方正县| 乌兰察布市| 通辽市| 游戏| 五家渠市| 定西市| 郓城县| 大埔区| 竹北市| 兴文县| 兴隆县| 普定县| 肥乡县| 东乡县| 永宁县| 莱西市| 和政县| 德清县| 昭通市| 海晏县| 凤台县| 荔浦县| 南澳县| 思茅市| 名山县| 中山市| 鹰潭市| 泰州市|