过滤有效查询条件的好方法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 过滤有效查询条件的好方法

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

 2014/11/13 18:45:57  ysj5125094  程序员俱乐部  我要评论(0)
  • 摘要:在工作中经常遇到明细查询,前段有很多查询条件,但是不是每次所有条件都录入,这样就用到了我下边的方法,用于解决前端查询条件过多,并且不好判断哪些是有效(输入即为有效)的查询条件。首先用一个DTO来接收所有条件(包括录入和未录入的),之后再用下面通过方法来过滤这个DTO,把有效的条件放在Map中返回。DTO就是简单的bean对象,这里不写了。把处理方法贴出来,在main方法中有具体使用方法。packagecom.yusj;importjava.lang.reflect.Field
  • 标签:方法 有效

?

在工作中经常遇到明细查询,前段有很多查询条件,但是不是每次所有条件都录入,这样就用到了我下边的方法,用于解决前端查询条件过多,并且不好判断哪些是有效(输入即为有效)的查询条件。首先用一个DTO来接收所有条件(包括录入和未录入的),之后再用下面通过方法来过滤这个DTO,把有效的条件放在Map中返回。

DTO就是简单的bean对象,这里不写了。把处理方法贴出来,在main方法中有具体使用方法

?

class="java">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");
		}

	}
}

?

?

?

?

?

?

发表评论
用户名: 匿名