<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

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

    Hibernate3提供了DetachedCriteria,使得我們可以在Web層構造detachedCriteria,然后調用業務層Bean,進行動態條件查詢,根據這一功能,我設計了通用的抽象Bean基類和分頁類支持,代碼來自于Quake Wang的javaeye-core包的相應類,然后又做了很多修改。

    分頁支持類:

    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;
            }

    }



    抽象業務類
    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層構造查詢條件detachedCriteria,和可選的startIndex,調用業務bean的相應findByCriteria方法,返回一個PaginationSupport的實例ps。

    ps.getItems()得到已分頁好的結果集
    ps.getIndexes()得到分頁索引的數組
    ps.getTotalCount()得到總結果數
    ps.getStartIndex()當前分頁索引
    ps.getNextIndex()下一頁索引
    ps.getPreviousIndex()上一頁索引
    posted on 2006-02-10 08:51 TrampEagle 閱讀(4782) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲国产精品成人一区| 日韩免费视频网站| 亚洲伊人久久精品影院| 国产亚洲美女精品久久久久| 天天看片天天爽_免费播放| 亚洲人成黄网在线观看| 免费毛片a在线观看67194| 亚洲最大在线观看| 免费国产作爱视频网站| 亚洲欧洲日韩极速播放| 日韩午夜免费视频| 高潮毛片无遮挡高清免费视频| 亚洲?V无码乱码国产精品| 国产免费黄色无码视频| 亚洲AV无码第一区二区三区| 久久国产精品免费专区| 亚洲成在人线电影天堂色| 成年女人午夜毛片免费视频 | 91精品免费久久久久久久久| 亚洲综合激情另类小说区| 久久精品免费一区二区| 亚洲性线免费观看视频成熟| 尤物永久免费AV无码网站| 黄色免费网站在线看| 亚洲av无码专区在线播放| 3d动漫精品啪啪一区二区免费| 亚洲欧洲另类春色校园网站| 国产小视频在线免费| 一个人看的hd免费视频| 亚洲福利视频导航| 青青草免费在线视频| 日亚毛片免费乱码不卡一区| 国产成人亚洲综合色影视| 日韩精品成人无码专区免费 | 日本免费电影一区| 久久久精品视频免费观看| 中文字幕亚洲精品资源网| 国产成人无码免费视频97| 国产中文字幕在线免费观看| 亚洲va在线va天堂成人| 国产精品亚洲αv天堂无码|