📄 hibernatehelper.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 + -