BlogJava 聯(lián)系 聚合 管理  

          Blog Stats

          隨筆檔案(17)

          文章檔案(1)


          GaoWei

          package ynzc.example.hibernate;

          import java.io.Serializable;
          import java.sql.SQLException;
          import java.util.Collection;
          import java.util.List;
          import java.util.Map;

          import org.apache.commons.collections.CollectionUtils;
          import org.apache.commons.collections.MapUtils;
          import org.apache.commons.lang.StringUtils;
          import org.hibernate.HibernateException;
          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.criterion.DetachedCriteria;
          import org.hibernate.criterion.Order;
          import org.hibernate.criterion.Projections;
          import org.hibernate.criterion.Restrictions;
          import org.springframework.orm.ObjectRetrievalFailureException;
          import org.springframework.orm.hibernate3.HibernateCallback;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          import ynzc.example.dao.Dao;

          /**
           * TODO:xxxxx
           * <br>
           * <b>Company</b>:
           *             Yunnan Zhong Cheng Technological Development Co., Ltd.
           * <br>
           * <b>Writer</b>:
           *            <a href="mailto:gggg874@126.com">gaowei,qq:8597034</a><br>
           * <b>CreateTime<b>:
           *            May 12, 2007 12:34:10 PM
           */
          public class DaoImpl extends HibernateDaoSupport implements Dao{

            private void doFilter(DetachedCriteria criteria,Map filter){
              if(MapUtils.isNotEmpty(filter)){
                for(Object fieldName:filter.keySet()){
                  Object value = filter.get(fieldName);
                  if (((String)fieldName).indexOf('.') > 0) {
                      String[] sArray = StringUtils.split((String)fieldName, '.');
                      for (int i = 0; i < sArray.length; i++) {
                          if (i == 0)
                              criteria.createAlias(sArray[i], "alias_"
                                      + sArray[i]);
                          else if (i > 0 && i < sArray.length - 1)
                              criteria.createAlias("alias_" + sArray[i - 1] + "."
                                      + sArray[i], "alias_" + sArray[i]);
                          else
                              fieldName = "alias_" + sArray[i - 1] + "."
                                      + sArray[i];
                      }
                  }
                  criteria.add(value==null?Restrictions.isNull((String) fieldName):Restrictions.eq((String)fieldName,value));
                }
              }
            }
           
            private void doSort(DetachedCriteria criteria,Map sort){
              if (MapUtils.isNotEmpty(sort)) {
                  for (Object fieldName : sort.keySet()) {
                      String orderType = (String) sort.get(fieldName);
                      criteria.addOrder(StringUtils
                              .equalsIgnoreCase("asc", orderType) ? Order
                              .asc((String) fieldName) : Order
                              .desc((String) fieldName));
                  }
              }
            }
           
            public List findAllBy(Class clazz, String name, Object value) {
              DetachedCriteria criteria=DetachedCriteria.forClass(clazz);
              criteria.add(Restrictions.eq(name,value));
              return findByCriteria(criteria);
            }

            public List findAllBy(Class clazz, Map filter, Map sorter,int...param) {
              DetachedCriteria criteria = DetachedCriteria.forClass(clazz);
              doFilter(criteria, filter);
              doSort(criteria, sorter);
              return this.findByCriteria(criteria, param);
            }

            public Object findBy(Class clazz, String name, Object value) {
              DetachedCriteria criteria = DetachedCriteria.forClass(clazz);
              criteria.add(Restrictions.eq(name, value));
              List list = this.findByCriteria(criteria, 1, 1);
              return CollectionUtils.isEmpty(list) ? null : list.iterator().next();
            }

            public List findByCriteria(DetachedCriteria criteria, int... param) {
              if(param.length>0){
                int max=param.length>1?param[1]:15;
                int first=param[0]>1?(param[0]-1)*max:0;
                return getHibernateTemplate().findByCriteria(criteria, first, max);
              }
             return getHibernateTemplate().findByCriteria(criteria);
            }

            public List findByHql(String hql, Object... param) {
              if (param.length == 0)
                  return getHibernateTemplate().find(hql);
              else
                  return getHibernateTemplate().find(hql, param);
            }

            public List findByHql(final String hql,final int pageNo,final int pageSize,final Object... param) {
              return this.getHibernateTemplate().executeFind(new HibernateCallback() {
                  public Object doInHibernate(Session session)
                          throws HibernateException, SQLException {
                      Query query = session.createQuery(hql);
                      if (param != null) {
                          for (int i = 0; i < param.length; i++) {
                              query.setParameter(i, param[i]);
                          }
                      }
                      if (pageNo > 0) {
                          int maxResults = pageSize > 0 ? pageSize : 15;
                          int firstResult = pageNo > 1 ? (pageNo - 1) * maxResults : 0;
                          query.setFirstResult(firstResult);
                          query.setMaxResults(maxResults);
                      }
                      return query.list();
                  }
              });
            }

            public Object getObject(Class clazz, Serializable id) {
              Object o = getHibernateTemplate().get(clazz, id);
              if (o == null) {
                  throw new ObjectRetrievalFailureException(clazz, id);
              }
              return o;
            }

            public List getObjects(Class clazz) {
             return getHibernateTemplate().loadAll(clazz);
            }

            public void removeObject(Class clazz, Serializable id) {
             
              getHibernateTemplate().delete(getObject(clazz,id));
            }

            public void removeObject(Collection collection) {
              getHibernateTemplate().deleteAll(collection);
            }

            public void removeObject(Object object) {
              getHibernateTemplate().delete(object);
            }

            public Serializable savaObject(Object object) {
              return getHibernateTemplate().save(object);
            }

            public int totalFilter(Class clazz, Map filter) {
              DetachedCriteria criteria=DetachedCriteria.forClass(clazz);
              doFilter(criteria,filter);
              criteria.setProjection(Projections.rowCount());
              return ((Number)this.findByCriteria(criteria).iterator().next()).intValue();
            }

            public void updateObject(Object object) {
              getHibernateTemplate().update(object);
            }

          }


          posted on 2007-05-12 12:34 gggg874 閱讀(707) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 措勤县| 四川省| 汤原县| 阿克苏市| 建宁县| 东乡| 宜阳县| 仲巴县| 霸州市| 阜宁县| 郴州市| 勐海县| 汾阳市| 科技| 彩票| 西乌珠穆沁旗| 金堂县| 沅陵县| 竹溪县| 阜新市| 白水县| 新田县| 阳高县| 旬阳县| 南陵县| 华池县| 泗水县| 凉城县| 凤庆县| 万年县| 凤山市| 湘阴县| 广平县| 黔西县| 沁源县| 昌平区| 静乐县| 常州市| 清徐县| 桃园市| 民丰县|