过滤有效查询条件的好方法
在工作中经常遇到明细查询,前段有很多查询条件,但是不是每次所有条件都录入,这样就用到了我下边的方法,用于解决前端查询条件过多,并且不好判断哪些是有效(输入即为有效)的查询条件。首先用一个DTO来接收所有条件(包括录入和未录入的),之后再用下面通过方法来过滤这个DTO,把有效的条件放在Map中返回。
DTO就是简单的bean对象,这里不写了。把处理方法贴出来,在main方法中有具体使用方法。
package com.yusj;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.sim.machine.web.dto.QueryPermissionOprtDto;
/**
*
* @ClassName: QueryBaseDto
* @Description: 用于过滤哪些查询条件有效
* @author shaojian.yu
* @date 2014年10月27日 下午2:32:35
*
*/
public class QueryBaseDtoUtils {
/**
*
* @Title:getFiledValues
* @Description: 根据对象获取属性值
* @author shaojian.yu
* @date 2014年10月27日 下午2:33:05
* @param o
* @return
*/
public static Object[] getFiledValues(Object o) {
String[] fieldNames = getFiledName(o);
Object[] value = new Object[fieldNames.length];
for (int i = 0; i < fieldNames.length; i++) {
value[i] = getFieldValueByName(fieldNames[i], o);
}
return value;
}
/**
*
* @Title:getFiledName
* @Description: 获取属性名数组
* @author shaojian.yu
* @date 2014年10月27日 下午2:33:35
* @param o
* @return
*/
public static String[] getFiledName(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
// System.out.println(fields[i].getType());
fieldNames[i] = fields[i].getName();
}
return fieldNames;
}
/**
*
* @Title:getFieldValueByName
* @Description: 根据属性名获取属性值
* @author shaojian.yu
* @date 2014年10月27日 下午2:33:48
* @param fieldName
* @param o
* @return
*/
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
return null;
}
}
/**
*
* @Title:getParamMap
* @Description: 获取有效的查询条件
* @author shaojian.yu
* @date 2015年3月25日 下午7:08:46
* @param o 待过滤的dto
* @return
*/
public static Map<String, Object> getParamMap(Object o) {
Map<String, Object> resultMap = new HashMap<String, Object>();
String[] fieldNames = QueryBaseDtoUtils.getFiledName(o);
for (String field : fieldNames) {
Object obj = QueryBaseDtoUtils.getFieldValueByName(field, o);
if(obj != null){
if(obj instanceof String){
if (StringUtils.isNotBlank((String) obj)) {
resultMap.put(field, obj);
}
}else{
resultMap.put(field, obj);
}
}
}
return resultMap;
}
public static void main(String[] args) {
TestBean io = new TestBean();
io.setBatchId("batchId");
io.setQuantity(20l);
Map<String,Object> map = QueryBaseDtoUtils.getParamMap(io);
System.out.println(new Gson().toJson(map));
}
}
转载自:https://blog.csdn.net/ysj5125094/article/details/84685535