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

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

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

    鷹翔宇空

    學(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)行動態(tài)條件查詢,根據(jù)這一功能,我設(shè)計了通用的抽象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方法,返回一個PaginationSupport的實例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) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲日本人成中文字幕| 日韩av无码久久精品免费| 中国在线观看免费国语版| 最近免费最新高清中文字幕韩国| 中文字幕亚洲免费无线观看日本 | 亚洲午夜成人精品电影在线观看| 久久精品国产亚洲AV无码娇色| 黄色网址在线免费| 内射少妇36P亚洲区| 亚欧人成精品免费观看| 亚洲日本香蕉视频| 国产免费不卡v片在线观看| 亚洲一区二区三区国产精品无码| 成人免费一级毛片在线播放视频| 久久精品亚洲AV久久久无码| 青青久在线视频免费观看| 中文字幕无码精品亚洲资源网久久| 成人免费视频一区| 免费无码午夜福利片69| 久久久久国产成人精品亚洲午夜| 999zyz**站免费毛片| 亚洲日本中文字幕区| 99在线视频免费观看视频| 亚洲AV无码片一区二区三区| 亚洲精品无码永久在线观看| 国产精品99精品久久免费| 亚洲精品亚洲人成在线观看麻豆| 性感美女视频在线观看免费精品 | 浮力影院亚洲国产第一页| 国产一区二区三区免费| 亚洲性色成人av天堂| 精品国产免费一区二区| 一区二区三区免费看| 亚洲国产精品国自产电影| 在线观看免费大黄网站| 久久av免费天堂小草播放| 亚洲黄色在线播放| 在线永久免费观看黄网站| a级成人毛片免费图片| 亚洲a∨无码男人的天堂| 亚洲国产成人久久一区久久|