过滤有效查询条件的好方法

 

在工作中经常遇到明细查询,前段有很多查询条件,但是不是每次所有条件都录入,这样就用到了我下边的方法,用于解决前端查询条件过多,并且不好判断哪些是有效(输入即为有效)的查询条件。首先用一个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

You may also like...