首页 > 其他 > 详细

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

时间:2014-11-14 02:13:27      阅读:251      评论:0      收藏:0      [点我收藏+]

?

在工作中经常遇到明细查询,前段有很多查询条件,但是不是每次所有条件都录入,这样就用到了我下边的方法,用于解决前端查询条件过多,并且不好判断哪些是有效(输入即为有效)的查询条件。首先用一个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:getParamList
	 * @Description: 获取有效的查询条件
	 * @author shaojian.yu
	 * @date 2014年10月27日 下午2:49:04
	 * @param o
	 * @return
	 */
	public static Map<String, Object> getParamMap(Object o) {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		String[] fieldNames = getFiledName(o);
		for (String field : fieldNames) {
			Object obj = getFieldValueByName(field, o);
			if (StringUtil.checkNotNull((String) obj)) {
				resultMap.put(field, obj);
			}
		}
		return resultMap;
	}

	public static void main(String[] args) {
		// 要检测的查询数据对象
		TestDto dto = new TestDto(); // DOJO
		dto.setFid("123");
		dto.setName("1110");
		// 获取所有属性列
		Map<String, Object> paramMap = QueryBaseDtoUtils.getParamMap(dto);
		for (Entry<String, Object> entry : paramMap.entrySet()) {
			// 拼接查询语句时,可以直接将Key做为字段名value做为查询条件(前提是DTO中的属性名要与Model中的相同,没有多表关联可以直接用Model).
			System.out.println(entry.getKey() + ":" + entry.getValue() + "\t");
		}

	}
}

?

?

?

?

?

?

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

原文:http://ysj5125094.iteye.com/blog/2155639

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!