hibernate不是泛型的通用DAo

来源:互联网 发布:又当黑客又当程序员 编辑:程序博客网 时间:2024/05/29 19:07

package com.yingfeng.core.hibernate.imp;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.hql.ast.QueryTranslatorImpl;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.yingfeng.core.command.CriteriaCommand;
import com.yingfeng.core.command.QueryFilter;
import com.yingfeng.core.command.SortCommandImpl;
import com.yingfeng.core.hibernate.DynamicDao;
import com.yingfeng.core.web.PageBean;

public class DynamicDaoImpl
  implements DynamicDao
{
  private String entityClassName;
  private SessionFactory sessionFactory;
  private HibernateTemplate hibernateTemplate;

  public DynamicDaoImpl(String paramString)
  {
    this.entityClassName = paramString;
  }

  public DynamicDaoImpl()
  {
  }

  public String getEntityClassName()
  {
    return this.entityClassName;
  }

  public void setEntityClassName(String paramString)
  {
    this.entityClassName = paramString;
  }

  public SessionFactory getSessionFactory()
  {
    return this.sessionFactory;
  }

  public void setSessionFactory(SessionFactory paramSessionFactory)
  {
    this.sessionFactory = paramSessionFactory;
  }

  public HibernateTemplate getHibernateTemplate()
  {
    if (this.hibernateTemplate == null)
      this.hibernateTemplate = new HibernateTemplate(this.sessionFactory);
    return this.hibernateTemplate;
  }

  public void setHibernateTemplate(HibernateTemplate paramHibernateTemplate)
  {
    this.hibernateTemplate = paramHibernateTemplate;
  }

  public Object save(Object paramObject)
  {
    getHibernateTemplate().save(this.entityClassName, paramObject);
    return paramObject;
  }

  public Object merge(Object paramObject)
  {
    getHibernateTemplate().merge(this.entityClassName, paramObject);
    return paramObject;
  }

  public Object get(Serializable paramSerializable)
  {
    return getHibernateTemplate().load(this.entityClassName, paramSerializable);
  }

  public void remove(Serializable paramSerializable)
  {
    getHibernateTemplate().delete(this.entityClassName, get(paramSerializable));
  }

  public void remove(Object paramObject)
  {
    getHibernateTemplate().delete(this.entityClassName, paramObject);
  }

  public void evict(Object paramObject)
  {
    getHibernateTemplate().evict(paramObject);
  }

  public Long getTotalItems(String paramString, final Object[] paramArrayOfObject)
  {
    int i = paramString.toUpperCase().indexOf(" ORDER BY ");
    if (i != -1)
      paramString = paramString.substring(0, i);
    QueryTranslatorImpl localQueryTranslatorImpl = new QueryTranslatorImpl(paramString, paramString, Collections.EMPTY_MAP, (SessionFactoryImplementor)getSessionFactory());
    localQueryTranslatorImpl.compile(Collections.EMPTY_MAP, false);
    final String str = "select count(1) from (" + localQueryTranslatorImpl.getSQLString() + ") tmp_count_t";
    Object localObject = getHibernateTemplate().execute(new HibernateCallback()
    {
     //str, paramArrayOfObject
      public Object doInHibernate(Session paramSession)
        throws HibernateException, SQLException
      {
        SQLQuery localSQLQuery = paramSession.createSQLQuery(str);
        if (paramArrayOfObject != null)
          for (int i = 0; i < paramArrayOfObject.length; i++)
            localSQLQuery.setParameter(i, paramArrayOfObject);
        return localSQLQuery.uniqueResult();
      }
    });
    return new Long(localObject.toString());
  }

  public List<Object> getAll()
  {
    return (List)getHibernateTemplate().execute(new HibernateCallback()
    {
      public Object doInHibernate(Session paramSession)
        throws HibernateException, SQLException
      {
        String str = "from " + DynamicDaoImpl.this.entityClassName;
        Query localQuery = paramSession.createQuery(str);
        return localQuery.list();
      }
    });
  }

  public List<Object> getAll(final PageBean paramPageBean)
  {
    final String str = "from " + this.entityClassName;
    int i = getTotalItems(str, null).intValue();
    paramPageBean.setTotalItems(i);
    return (List)getHibernateTemplate().execute(new HibernateCallback()
    {
     //str, paramPageBean
      public Object doInHibernate(Session paramSession)
        throws HibernateException, SQLException
      {
        Query localQuery = paramSession.createQuery(str);
        localQuery.setFirstResult(paramPageBean.getFirstResult()).setFetchSize(paramPageBean.getPageSize().intValue());
        localQuery.setMaxResults(paramPageBean.getPageSize().intValue());
        return localQuery.list();
      }
    });
  }

  public List<Object> getAll(final QueryFilter paramQueryFilter)
  {
    int i = getCountByFilter(paramQueryFilter);
    paramQueryFilter.getPageBean().setTotalItems(i);
    List localList = (List)getHibernateTemplate().execute(new HibernateCallback()
    {
      public Object doInHibernate(Session paramSession)
        throws HibernateException, SQLException
      {
        Criteria localCriteria = paramSession.createCriteria(DynamicDaoImpl.this.entityClassName);
        paramQueryFilter.getAliasSet().clear();
        DynamicDaoImpl.this.setCriteriaByQueryFilter(localCriteria, paramQueryFilter);
        return localCriteria.list();
      }
    });
    return localList;
  }

  protected int getCountByFilter(final QueryFilter paramQueryFilter)
  {
    Object localObject = getHibernateTemplate().execute(new HibernateCallback()
    {
      public Object doInHibernate(Session paramSession)
        throws HibernateException, SQLException
      {
        Criteria localCriteria = paramSession.createCriteria(DynamicDaoImpl.this.entityClassName);
        for (int i = 0; i < paramQueryFilter.getCommands().size(); i++)
        {
          CriteriaCommand localCriteriaCommand = (CriteriaCommand)paramQueryFilter.getCommands().get(i);
          if ((localCriteriaCommand instanceof SortCommandImpl))
            continue;
          localCriteria = localCriteriaCommand.execute(localCriteria);
        }
        localCriteria.setProjection(Projections.rowCount());
        return localCriteria.uniqueResult();
      }
    });
    if (localObject == null)
      return new Integer(0).intValue();
    return new Integer(localObject.toString()).intValue();
  }

  private Criteria setCriteriaByQueryFilter(Criteria paramCriteria, QueryFilter paramQueryFilter)
  {
    for (int i = 0; i < paramQueryFilter.getCommands().size(); i++)
      paramCriteria = ((CriteriaCommand)paramQueryFilter.getCommands().get(i)).execute(paramCriteria);
    paramCriteria.setFirstResult(paramQueryFilter.getPageBean().getFirstResult());
    paramCriteria.setMaxResults(paramQueryFilter.getPageBean().getPageSize().intValue());
    return paramCriteria;
  }
}

 

 

package com.yingfeng.core.hibernate;


import java.io.Serializable;
import java.util.List;

import com.yingfeng.core.command.QueryFilter;
import com.yingfeng.core.web.PageBean;

public abstract interface DynamicDao
{
  public abstract Object save(Object paramObject);

  public abstract Object merge(Object paramObject);

  public abstract Object get(Serializable paramSerializable);

  public abstract void remove(Serializable paramSerializable);

  public abstract void remove(Object paramObject);

  public abstract void evict(Object paramObject);

  public abstract List<Object> getAll();

  public abstract List<Object> getAll(PageBean paramPagingBean);

  public abstract List<Object> getAll(QueryFilter paramQueryFilter);
  public String getEntityClassName();
  public void setEntityClassName(String paramString);
}

 

package com.yingfeng.core.web;

public class PageBean
{
  public static final String PAGING_BEAN = "_paging_bean";
  public static Integer DEFAULT_PAGE_SIZE = Integer.valueOf(25);
  public static final int SHOW_PAGES = 6;
  public Integer start;
  private Integer pageSize;
  private Integer totalItems;

  public PageBean(int paramInt1, int paramInt2)
  {
    this.pageSize = Integer.valueOf(paramInt2);
    this.start = Integer.valueOf(paramInt1);
  }

  public Integer getPageSize()
  {
    return this.pageSize;
  }

  public void setPageSize(int paramInt)
  {
    this.pageSize = Integer.valueOf(paramInt);
  }

  public int getTotalItems()
  {
    return this.totalItems.intValue();
  }

  public Integer getStart()
  {
    return this.start;
  }

  public void setStart(Integer paramInteger)
  {
    this.start = paramInteger;
  }

  public void setTotalItems(Integer paramInteger)
  {
    this.totalItems = paramInteger;
  }

  public void setTotalItems(int paramInt)
  {
    this.totalItems = Integer.valueOf(paramInt);
  }

  public int getFirstResult()
  {
    return this.start.intValue();
  }
}

 

 

 

 

0 0