/**
*
* @param queryString
* HQL语句
* @param parameters
* HQL语句中字段的值,例如 字段1=?,字段2=?,parameters是这些字段值组成的数组
* @return
*/
@Override
public Object queryBySelf(String queryString,Object... parameters) {
Session session = this.getSessionFactory().openSession();
Query query = session.createQuery(queryString);
Class<? extends Query> queryClass = Query.class;
Boolean isBasicType=false;
Field basicTypeField=null;
if(parameters!=null&¶meters.length>0) {
try {
for(int i=0;i<parameters.length;i++) {
Class<? extends Object> parameterClass = parameters[i].getClass();
String simpleName = parameterClass.getSimpleName();
Field[] declaredFields = parameterClass.getDeclaredFields();
for (Field field : declaredFields) {
String fieldName = field.getName();
if("TYPE".equals(fieldName)) {
isBasicType=true;
basicTypeField = field;
break;
}
}
Method method=null;
if(isBasicType) {
if(basicTypeField!=null) {
basicTypeField.setAccessible(true);
Object object = basicTypeField.get(null);
method = queryClass.getMethod("set"+simpleName, Integer.TYPE,(Class<?>)object);
}
isBasicType=false;
}else {
method = queryClass.getMethod("set"+simpleName, Integer.TYPE,parameterClass);
}
method.invoke(query,i, parameterClass.cast(parameters[i]));
// query.setCharacter(i, (Character)(parameters[i]));
}
return query.list();
} catch (Exception e) {
e.printStackTrace();
}
}else {
return query.list();
}
return null;
}