hibernate通用方法





	/**
	 * 根据sql生产制定的entityClass类型对象
	 * @param sql
	 * @param entityClass
	 * @param scalarList
	 * @param conditions
	 * @return
	 */
	public List<?> findObjectBySql(final String sql,final Class<?> entityClass,final List<HibernateQueryContion> scalarList,final HibernateQueryContion... conditions){
		List<?> result = (List<?>)getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				SQLQuery query = session.createSQLQuery(sql);
			
				for(HibernateQueryContion condition:conditions){
					Object value = condition.getValue();
					String propertyName = condition.getPropertyName();
					if(value instanceof Collection){
						query.setParameterList(propertyName, (Collection)value);
					}else{
						query.setParameter(propertyName, value);
					}
				}
				if(scalarList != null && scalarList.size() > 0){
					for(HibernateQueryContion scalar:scalarList){
						query.addScalar(scalar.getPropertyName(), scalar.getHiberateType());
					}
					query.setResultTransformer(Transformers.aliasToBean(entityClass));
				}
				return query.list();
			}
		});
		return result;
	}
	
	/**
	 * 根据提供的HQL进行条件查询
	 * @param list
	 * @param hql
	 * @return
	 */
	public List<?> findByConditions(final List<HibernateQueryContion> list,final String hql){
		List<?> result = (List<?>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query select = session.createQuery(hql);
				 Iterator<HibernateQueryContion> iterator = list.iterator();
				 while(iterator.hasNext()){
					 HibernateQueryContion condition = iterator.next();
					 Object value = condition.getValue();
					 if(value instanceof Collection){
						 select.setParameterList(condition.getPropertyName(), (Collection)value);
					 }else{
						 select.setParameter(condition.getPropertyName(), condition.getValue());
					 }
				 }
				return select.list();
			}
		});
		return result;
	}
	/**
	 * 根据提供的HQL进行分页条件查询
	 * @param list
	 * @param hql
	 * @param pageSize
	 * @param firstResult
	 * @return
	 */
	public List<?> findByConditions(final List<HibernateQueryContion> list,final String hql,final Integer pageSize,final Integer firstResult){
		List<?> result = (List<?>) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				Query select = session.createQuery(hql);
				Iterator<HibernateQueryContion> iterator = list.iterator();
				while (iterator.hasNext()) {
					HibernateQueryContion condition = iterator.next();
					Object value = condition.getValue();
					if (value instanceof Collection) {
						select.setParameterList(condition.getPropertyName(), (Collection) value);
					} else {
						select.setParameter(condition.getPropertyName(), condition.getValue());
					}
				}
				select.setMaxResults(pageSize);
				select.setFirstResult(firstResult);
				return select.list();
			}
		});
		return result;
	}	
	/**
	 * 统计某个实例的总数
	 * @param entityClass
	 * @param countParamsName
	 * @return
	 */
	public int getCountNum(Class<?> entityClass,String countParamsName){
		Criterion[] caseArray = new Criterion[0] ;
		Criteria c = createCriteria(entityClass, caseArray);
		c.setProjection(Projections.count(countParamsName));
		Integer result = (Integer)c.uniqueResult();				
		return result;
	}
	/**
	 * 根据提供的条件统计总数,不能进行模糊统计
	 * @param entityClass
	 * @param countParamsName
	 * @param conditions
	 * 调用方式如下:
	 * <pre>
	 *        dao.getCountNum(entityClass,countParamsName)
	 *        dao.getCountNum(entityClass,countParamsName,arg0);
	 *        dao.getCountNum(entityClass,countParamsName,arg0,arg1);
	 *        dao.getCountNum(entityClass,countParamsName,new Object[arg0,arg1,arg2])
	 * </pre>
	 * @return
	 */
	public int getCountNum(Class<?> entityClass,String countParamsName,HibernateQueryContion... conditions){
		Criteria c = createCriteria(entityClass,conditions);
		c.setProjection(Projections.count(countParamsName));
		Integer result = (Integer)c.uniqueResult();				
		return result;
	}


	/**
	 * 查询entityClass类型对象的所有记录
	 * @param entityClass
	 * @return
	 */
	public List<?> findObjects(Class<?> entityClass){
		Criteria criteria = createCriteria(entityClass);
		return criteria.list();
	}
	/**
	 * 根据条件查询对应的类属性集合
	 * @param entityClass
	 * @param propertyNames
	 * @param conditions
	 * @return
	 * 返回结果如下:
	 * List<Object[]> objArrayList;object数组中第一个记录对应
	 * propertyNames的第一个属性的值,
	 * 例如:
	 * String[] propertyNames = new String[4]{"id","name","age","address"};
	 * .....
	 * 返回结果中Object[]对应的:
	 * for(Object[] objs:objArrayList){
	 * ...
	 * idValue = objs[0];
	 * nameValue = objs[1];
	 * ...
	 * addressValue = objs[3];
	 */
	public List<?> findObjectsByCondition(Class<?> entityClass,String[] propertyNames,HibernateQueryContion... conditions){
		Criteria criteria = createCriteria(entityClass,conditions);
		ProjectionList proList = Projections.projectionList();
		for (String propertyName : propertyNames) {
			proList.add(Projections.property(propertyName));
		}
		criteria.setProjection(proList);
		return criteria.list();
	}
	/**
	 * 根据条件查询对应的类属性集合
	 * @param  entityClass
	 * @param propertyNames
	 * @param conditions
	 * @return
	 * 返回结果如下:
	 * List<T> objArrayList;
	 */
	public List<?> findObjectsByCondition(Class<?> entityClass,String propertyName,HibernateQueryContion... conditions){
		Criteria criteria = createCriteria(entityClass, conditions);
		criteria.setProjection(Projections.property(propertyName));
		return criteria.list();
	}
	/**
	 * 根据entityClass类型创建Criteria实例
	 * @param entityClass
	 * @return
	 */
	public Criteria createCriteria(Class<?> entityClass){
		SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Criteria criteria = session.createCriteria(entityClass);
		return criteria;
	}
	/**
	 * 根据查询条件创建Criterion实例集合
	 * @param conditions
	 * @return
	 */
	public Criteria createCriteria(Class<?> entityClass,HibernateQueryContion... conditions) {
		SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Criteria criteria = session.createCriteria(entityClass);
		for (HibernateQueryContion condition : conditions) {
			switch (HibernateQueryContion.queryType.valueOf(condition.getType())) {
			case in:
				criteria.add(Restrictions.in(condition.getPropertyName(), (Collection) condition.getValue()));
				break;
			case eq:
				criteria.add(Restrictions.eq(condition.getPropertyName(), condition.getValue()));
				break;
			case like:
				criteria.add(Restrictions.like(condition.getPropertyName(), condition.getValue()));
				break;
			case asc:
				criteria.addOrder(Order.asc(condition.getPropertyName()));
				break;
			case ne:
				criteria.add(Restrictions.ne(condition.getPropertyName(), condition.getValue()));
				break;
			case isNull:
				criteria.add(Restrictions.isNull(condition.getPropertyName()));
			default:
				break;
			}
		}
		return criteria;
	}

package com.hikvision.cms.scaffolding.dao;

import java.util.List;

import org.hibernate.type.NullableType;


public class HibernateQueryContion{
	public static final String EQ = "eq";
	public static final String LIKE = "like";
	public static final String IN = "in";
	public static final String ASC = "asc";
	public static final String NE = "ne";
	public static final String ISNULL = "isNull";
	
	private Object value;
	private String propertyName;
	private String type;
	private NullableType hiberateType;
	
	public HibernateQueryContion(String propertyName, Object value) {
		super();
		this.propertyName = propertyName;
		this.value = value;
		this.type =  HibernateQueryContion.EQ;
	}
	public HibernateQueryContion(String propertyName, Object value,String type) {
		super();
		this.propertyName = propertyName;
		this.value = value;
		this.setType(type);
	}
	
	public HibernateQueryContion(String propertyName, NullableType hiberateType) {
		super();
		this.propertyName = propertyName;
		this.hiberateType = hiberateType;
	}
	public Object getValue() {
		return value;
	}
	public void setValue(Object value) {
		this.value = value;
	}
	public void setPropertyName(String propertyName) {
		this.propertyName = propertyName;
	}
	public String getPropertyName() {
		return propertyName;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getType() {
		return type;
	}
	public void setHiberateType(NullableType hiberateType) {
		this.hiberateType = hiberateType;
	}
	public NullableType getHiberateType() {
		return hiberateType;
	}
	public static enum queryType{
		eq,like,in,asc,ne,isNull;
		public queryType getQueryTypeEnum(String type){
			return valueOf(type);
		}
	}
}




你可能感兴趣的:(Hibernate)