<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
    主站蜘蛛池模板: 成人电影在线免费观看| 一级毛片直播亚洲| 永久免费不卡在线观看黄网站| 亚洲娇小性xxxx| 亚洲国产精品国自产电影| 免费少妇a级毛片| 成人免费视频软件网站| 91在线手机精品免费观看| 丁香花在线观看免费观看图片| 亚洲av乱码一区二区三区按摩| 狠狠色香婷婷久久亚洲精品| 久久亚洲AV成人无码| 精品久久香蕉国产线看观看亚洲| 啊灬啊灬别停啊灬用力啊免费看| 最近2019中文字幕免费看最新| 18禁美女黄网站色大片免费观看| 久久99精品国产免费观看| 中文字幕av免费专区| 一日本道a高清免费播放| 羞羞视频网站免费入口| 亚洲乱码av中文一区二区| 亚洲最大的黄色网| 亚洲最大视频网站| 亚洲欧洲校园自拍都市| 亚洲精品美女久久久久9999| 亚洲avav天堂av在线不卡| 亚洲一区二区三区日本久久九| 在线亚洲97se亚洲综合在线| 久久久久国产亚洲AV麻豆| 在线观看亚洲精品国产| 久久久青草青青国产亚洲免观| 亚洲国产午夜中文字幕精品黄网站| 国产特级淫片免费看| 啊v在线免费观看| 亚洲精品国产高清不卡在线| 久久精品国产亚洲AV电影| 99久久99久久精品免费看蜜桃| 亚洲中文精品久久久久久不卡| 亚洲精品美女久久久久99小说| 亚洲国产成人久久综合碰| 免费观看国产小粉嫩喷水|