if(Page.ASC.equals(orderArray[i])){
c.addOrder(Order.asc(orderByArray[i]));
}else{
c.addOrder(Order.desc(orderByArray[i]));
}
}
}
returnc;
}
/**
*执行count查询获得本次Hql查询所能获得的对象总数.
9
*
*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.
*/
protectedlongcountHqlResult(finalStringhql,finalObject...values){
Longcount=0L;
StringfromHql=hql;
//select子句与orderby子句会影响count查询,进行简单的排除.
fromHql="from"+StringUtils.substringAfter(fromHql,"from");
fromHql=StringUtils.substringBefore(fromHql,"orderby");
StringcountHql="selectcount(*)"+fromHql;
try{
count=findUnique(countHql,values);
}catch(Exceptione){
thrownewRuntimeException("hqlcan'tbeautocount,hql
is:
"+countHql,e);
}
returncount;
}
/**
*执行count查询获得本次Hql查询所能获得的对象总数.
*
*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.
*/
protectedlongcountHqlResult(finalStringhql,finalMapvalues){
Longcount=0L;
10
StringfromHql=hql;
//select子句与orderby子句会影响count查询,进行简单的排除.
fromHql="from"+StringUtils.substringAfter(fromHql,"from");
fromHql=StringUtils.substringBefore(fromHql,"orderby");
StringcountHql="selectcount(*)"+fromHql;
try{
count=findUnique(countHql,values);
}catch(Exceptione){
thrownewRuntimeException("hqlcan'tbeautocount,hql
is:
"+countHql,e);
}
returncount;
}
/**
count查询获得本次Criteria查询所能获得的对象总数.*执行
*/
@SuppressWarnings("unchecked")
protectedintcountCriteriaResult(finalCriteriac){
CriteriaImplimpl=(CriteriaImpl)c;
//先把Projection、ResultTransformer、OrderBy取出来,清空三者后再执行Count操作
Projectionprojection=impl.getProjection();
ResultTransformertransformer=impl.getResultTransformer();
ListorderEntries=null;
try{
orderEntries=(List)ReflectionUtils.getFieldValue(impl,"orderEntries");
ReflectionUtils.setFieldValue(impl,"orderEntries",newArrayList());
11
}catch(Exceptione){
logger.error("不可能抛出的异常:
{}",e.getMessage());
}
//执行Count查询
inttotalCount=(Integer)
c.setProjection(Projections.rowCount()).uniqueResult();
//将之前的Projection,ResultTransformer和OrderBy条件重新设回去
c.setProjection(projection);
if(projection==null){
c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
}
if(transformer!
=null){
c.setResultTransformer(transformer);
}
try{
ReflectionUtils.setFieldValue(impl,"orderEntries",orderEntries);
}catch(Exceptione){
logger.error("不可能抛出的异常:
{}",e.getMessage());
}
returntotalCount;
}
//属性过滤条件查询函数//
/**
*按属性查找对象列表,支持多种匹配方式.
*
*@parammatchType匹配方式,目前支持的取值见PropertyFilter的MatcheTypeenum.
*/
publicListfindBy(finalStringpropertyName,finalObject
12
value,finalMatchTypematchType){
Criterioncriterion=
buildPropertyFilterCriterion(propertyName,value,value.getClass(),
matchType);
returnfind(criterion);
}
/**
*按属性过滤条件列表查找对象列表.
*/
publicListfind(Listfilters){
Criterion[]criterions=
buildPropertyFilterCriterions(filters);
returnfind(criterions);
}
/**
*按属性过滤条件列表分页查找对象.
*/
publicPagefindPage(finalPagepage,finalListfilters){
Criterion[]criterions=
buildPropertyFilterCriterions(filters);
returnfindPage(page,criterions);
}
/**
*按属性条件列表创建Criterion数组,辅助函数.
*/
protectedCriterion[]buildPropertyFilterCriterions(finalListfilters){
ListcriterionList=newArrayList();
for(PropertyFilterfilter:
filters){
13
if(!
filter.isMultiProperty()){//只有一个属性需要比较的情况.
Criterioncriterion=
buildPropertyFilterCriterion(filter.getPropertyName(),filter.getPropertyValue(),
filter.getPropertyType(),
filter.getMatchType());
criterionList.add(criterion);
}else{//包含多个属性需要比较的情况,进行or处理.
Disjunctiondisjunction=Restrictions.disjunction();
for(Stringparam:
filter.getPropertyNames()){
Criterioncriterion=
buildPropertyFilterCriterion(param,filter.getPropertyValue(),
filter.getPropertyType(),filter.getMatchType());
disjunction.add(criterion);
}
criterionList.add(disjunction);
}
}
ReturncriterionList.toArray(newCriterion[criterionList.size()]);
}
/**
*按属性条件参数创建Criterion,辅助函数.
*/
protectedCriterionbuildPropertyFilterCriterion(finalStringpropertyName,finalObjectpropertyValue,
finalClass
>propertyType,finalMatchTypematchType){
Assert.hasText(propertyName,"propertyName不能为空");
Criterioncriterion=null;
try{
14
//按entityproperty中的类型将字符串转