⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hibernatehelper.java

📁 这是一个轻便的j2ee的web应用框架,是一个在多个项目中运用的实际框架,采用struts,hebinate,xml等技术,有丰富的tag,role,navigation,session,dictio
💻 JAVA
字号:
/*
 * Created on 2004-3-23
 *
 */
package com.esimple.framework.dao.hibernate;

import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

import net.sf.hibernate.Criteria;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.expression.Expression;
import net.sf.hibernate.expression.Order;
import org.apache.commons.beanutils.PropertyUtils;

import com.esimple.framework.dao.support.DateRange;
import com.esimple.framework.dao.support.QueryOrder;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;

/**
 * @author steven
 *
 */
public class HibernateHelper {
	
	private Log logger = LogFactory.getLog( HibernateHelper.class );
	/**
	 * 批量增加查询条件,增加规则:<br>
	 * 读取po中所有不为空的字段值,设置到hiberante criteria中,比较规则为等于
	 * @param po
	 * @param criteria
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public static void addEqualsProperty(Object po, Criteria criteria)
	throws IllegalAccessException, InvocationTargetException,
			NoSuchMethodException {
		if (po == null) {
			throw new 
			IllegalArgumentException("No PO bean specified in addEqualsProperty");
		}
		if (criteria == null) {
			throw new 
			IllegalArgumentException("No Criteria bean specified in addEqualsProperty");
		}
		PropertyDescriptor origDescriptors[] =
			PropertyUtils.getPropertyDescriptors(po);
		for (int i = 0; i < origDescriptors.length; i++) {
			String name = origDescriptors[i].getName();
			
			if( name.equals("class") ) continue;
			if ( PropertyUtils.isReadable(po, name)) {
				Object value = PropertyUtils.getSimpleProperty(po, name);
				if( value == null ) continue;
				
				//如果为数字类型,且为默认值,则跳过
				//注意,如果值为0,也会跳过
				if( value instanceof Number && 
					((Number)value).longValue()==0 )	{
					System.out.println("ignore number value 0 in field:"+name );
					continue;
				} 
					
				criteria.add( Expression.eq(name, value) );
			}		
		}//for end
	}
	
	/**
	 * 设置查询结果的排序
	 * @param order
	 * @param criteria
	 */
	public static void addOrderClause(QueryOrder order, Criteria criteria) {
		if( order != null && !order.isNull() )	{
			List orders = order.getHibernateOrders();	
			for( int i=0;i<orders.size();i++){
				criteria.addOrder( (Order)orders.get(i));
			}
		}
	}
	
	
	/**
	 * 查询结果分页
	 * @param beginNum  开始的记录数
	 * @param length	每页的记录数 ,如果为-1表示所有记录
	 * @param criteria   查询条件
	 */
	public static void selectPage(
		int beginNum,
		int length,
		Criteria criteria){
		criteria.setFirstResult(beginNum);
		if( length != -1 ){
			criteria.setMaxResults(length);
		}
	}
	
	/**
	 * 单表分页查询
	 * @param session
	 * @param obj	查询的bean,需生成hibernate 映射文件
	 * @param beginNum 开始记录数,用于分页
	 * @param length	结果记录数 ,用于分页
	 * @param range		日期查询范围
	 * @param order		排序方式
	 * @return
	 * @throws DataAccessException
	 */
	public static List equalsQuery(
		Session session,
		Object obj,
		int beginNum,
		int length,
		DateRange range,
		QueryOrder order)
		throws DataAccessException {
		List list = null;
		try {
			Criteria criteria = session.createCriteria(obj.getClass());
			addEqualsProperty(obj, criteria);
			if (order != null) addOrderClause(order, criteria);
			selectPage(beginNum, length, criteria);
			if (range != null) 	range.addToCriteria(criteria);
			list = criteria.list();
			session.close();
		} catch (DataAccessException e) {
			throw e;
		} catch (HibernateException ee) {
			throw new DataRetrievalFailureException(ee.getMessage());
		} catch (Exception eee) {
			throw new DataRetrievalFailureException(eee.getMessage());
		}
		return list;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -