七郎's JavaBlog

          草木竹石皆可為劒。至人之用人若鏡,不將不迎,應(yīng)而不藏,故能勝物而不傷。
          posts - 60, comments - 14, trackbacks - 0, articles - 0
          Hibernate3提供了DetachedCriteria,使得我們可以在Web層構(gòu)造detachedCriteria,然后調(diào)用業(yè)務(wù)層Bean,進(jìn)行動(dòng)態(tài)條件查詢,根據(jù)這一功能,我設(shè)計(jì)了通用的抽象Bean基類和分頁(yè)類支持,代碼來(lái)自于Quake Wang的javaeye-core包的相應(yīng)類,然后又做了很多修改。

          分頁(yè)支持類:

          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()得到已分頁(yè)好的結(jié)果集
          ps.getIndexes()得到分頁(yè)索引的數(shù)組
          ps.getTotalCount()得到總結(jié)果數(shù)
          ps.getStartIndex()當(dāng)前分頁(yè)索引
          ps.getNextIndex()下一頁(yè)索引
          ps.getPreviousIndex()上一頁(yè)索引

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 陇南市| 红原县| 福鼎市| 眉山市| 盐源县| 马山县| 巴彦淖尔市| 巴彦县| 云安县| 宾川县| 乌鲁木齐县| 保靖县| 格尔木市| 苏尼特左旗| 嵩明县| 昂仁县| 娄底市| 八宿县| 麟游县| 邓州市| 岳阳县| 婺源县| 河北省| 仪陇县| 虞城县| 垦利县| 东丽区| 宜都市| 江西省| 额济纳旗| 营山县| 军事| 寿宁县| 罗定市| 奈曼旗| 昆山市| 通许县| 措美县| 嘉峪关市| 同心县| 崇礼县|