`

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

阅读更多

 

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

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    java-根据过滤条件显示树形结构

    本篇文章将详细讲解如何在Java中根据过滤条件来实现这一功能,同时也会提及所需的jar包。 首先,让我们理解树形结构的概念。树形结构是一种非线性的数据结构,它由节点(或称为顶点)和边组成,每个节点可以有零个...

    行式报表—筛选数据与过滤

    而通过数据列过滤则更适合处理复杂的过滤需求,特别是当需要在报表设计阶段就定义好过滤规则时。企业在实际应用过程中可以根据自身的具体情况选择最合适的方法,以提高数据处理的效率和准确性。

    小程序多条件查询

    4. **前端交互**:在小程序中,使用`wx.request`方法来调用后端API,传递用户的查询条件。当用户改变查询条件时,实时更新查询结果。同时,利用小程序的生命周期函数,如`onLoad`和`onShow`,来实现页面加载时的初始...

    页面内容的选择过滤方法

    在IT行业中,页面内容的选择过滤方法是Web开发中的一个重要概念,尤其在大数据量展示和用户交互性提升方面。本主题主要关注如何通过JavaScript技术来实现这一功能,这可以从提供的两个文件——`testTable1.html`和`...

    ORACLE进行树型查询时过滤条件的位置对结果的影响

    这导致`state='00A'`的条件仅对根节点有效,不对其他层级的节点进行过滤。 2. **过滤条件放在`CONNECT BY PRIOR`后面**: 如果过滤条件放在`CONNECT BY PRIOR`之后,如`connect by prior leach_rule_id=up_leach_...

    mybatis多条件查询处理方案(查询条件为数据库字段非传递参数).pdf

    在MyBatis中,多条件查询是常见的需求,特别是在数据检索和过滤时。通常,我们会根据传递的参数来决定查询的条件。然而,有时我们可能需要根据数据库字段本身的状态来进行查询,而不是依赖于传递的参数。针对这种...

    SuperMap Objects .NET设置图层过滤条件后地图效率提高

    标题"SuperMap Objects .NET设置图层过滤条件后地图效率提高"揭示了一个关键的性能优化策略:通过设定图层过滤条件,可以有效地筛选出需要在特定比例尺下显示的对象,从而避免一次性加载过多的数据,提升地图浏览...

    hibernate过滤器使用例子

    过滤器可以基于各种条件(如字符串匹配、数值比较等)对数据进行过滤,特别适用于那些频繁执行且条件固定的数据查询场景。 ### 配置与使用 在Hibernate中,过滤器的配置主要通过映射文件(如`.hbm.xml`)来完成。...

    C#视图过滤查询教程

    通过以上步骤,我们就能够实现C#中基于`DataView`的视图过滤查询,有效地展示和操纵数据。这种技术广泛应用于各种业务应用程序中,帮助用户快速查找和分析所需的信息。理解并掌握这一技术,对于提升C#应用程序的数据...

    PHP多条件查询1

    在PHP编程中,多条件查询是一项基础且重要的技能,尤其在处理复杂的数据过滤和排序时。这个场景描述中提到的"PHP多条件查询1"很可能是一个示例项目或教程,包含了一个名为"zh.php"的文件,用于演示如何在PHP中实现多...

    Java对List多个排序、查询条件的处理

    这些方法可能接受多个参数,比如比较器、过滤条件等,然后返回一个新的已处理的List。例如: ```java public static &lt;T&gt; List&lt;T&gt; groupAndSort(List&lt;T&gt; dataList, Function, K&gt; groupingKey, Comparator&lt;T&gt; ...

    可查询汇编指令(支持过滤查询)

    "可查询汇编指令(支持过滤查询)"的功能是为了帮助程序员和逆向工程师更有效地理解和使用汇编语言。这种工具通常具有以下特点: 1. **指令数据库**:该工具应包含各种处理器架构(如x86/x64, ARM, MIPS等)的完整...

    设置Ethereal的过滤规则.doc

    通过设置过滤规则,我们可以有选择性地捕获特定的数据包,如关注某一特定IP地址的通信、特定协议的交互或是异常的数据流,从而有效减少数据量,提高分析效率。 #### 二、设置Ethereal过滤规则的步骤详解 1. **启动...

    如何在水晶报表中过滤数据

    - **数据源查询过滤**:在数据链接属性中,你可以编辑SQL查询或命令,添加WHERE子句来设定过滤条件。例如,如果你想要显示年龄大于30岁的员工,可以在SQL语句中加入`WHERE Age &gt; 30`。 - **报表级别的过滤**:在...

    脉动流量条件下液压过滤器性能评估试验台的研究

    目前,液压过滤器过滤性能评定试验是在恒定流量下进行的,而在多 数液压系统中,油液的流量常伴有脉动变化。因此,提出脉动流量条件下过滤器过滤性能的评定方法是很有意义的

    教育科研-学习工具-M型过滤器及制作过滤纸芯的方法.zip

    这种过滤器不仅能够去除大颗粒,还能有效拦截微小颗粒,确保了过滤的精细程度。 二、M型过滤器的特点 1. 高效过滤:M型过滤器由于其增加的过滤面积,使得单位时间内能处理更多的流体,提高过滤效率。 2. 结构紧凑...

    ext中combo过滤

    在探讨“Ext中Combo过滤”的实现机制...通过上述介绍,我们可以看到在Ext中实现`ComboBox`的过滤功能不仅能够极大地提升用户的交互体验,还能有效优化应用的性能表现。希望本文能为你在实际开发过程中提供有用的参考。

Global site tag (gtag.js) - Google Analytics