`

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

阅读更多

 

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

相关推荐

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

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

    包过滤主机防火墙技术的研究

    进,提出一种充分利用现有技术与实验条件的包过滤防火墙系统 的设计方案,即在保留传统网络边界防火墙的同时,设计一种驻 留在内部网络终端的主机防火墙,将防火墙延伸到内部网络的终 端,从而有效防范来自网络内部...

    提高加压过滤机处理能力的技改实践

    泉店选煤厂通过对加压过滤机入料即浮选精矿进行喷水消泡,并将精煤磁选机尾矿分级旋流器的底流引入加压过滤机入料进行掺粗,有效地改善了加压过滤机入料条件,显著提高了加压过滤机的工作效果,使其处理能力由原来的25~...

    laravel-query-filter:Laravel查询过滤器提供了一种优雅的方式来通过请求查询字符串过滤资源

    您可以在查询字符串中指定条件,参数和关系以过滤有效的模型。 用法 通过composer安装: composer require omalizadeh/laravel-query-filter 制作一个过滤器类: php artisan make:filter FilterName 在模型中...

    PrimeNG.TableFilter:在后端使用LINQ to Entity的PrimeNG表加载惰性过滤器的助手

    将PrimeNG表过滤器有效负载转换为SQL查询(使用LINQ转换为实体) 通过Nuget软件包管理器安装 PM &gt; Install-Package PrimeNG.TableFilter 如何使用 处理ASP.Net MVC Controller中的PrimeNG表过滤器有效负载,在主体...

    用于过滤nexusphp 种子 的 flexget 插件_Python_代码_相关文件_下载

    过滤条件包括种子优惠信息(free等)、做种者情况、下载者情况 详细配置 cookie 网站cookie 必须填写 discount 优惠类型 默认不限制优惠类型。 列表类型,Flexget会只下载含有列表内优惠类型的种子。 有效值:free ...

    论文研究-一种融合用户学习过程的用户查询意图模型.pdf

    用户查询意图模型是查询扩展和查询推荐研究的一个热点。然而,日志包含的大量噪声对主流的用户查询意图...将该模型应用于查询推荐过程后,能有效提高查询条件相似性计算的准确率,并提高查询推荐结果的准确率和召回率。

    论文研究 - 开发前对较差矿床进行上游过滤准备

    地质过程形成了对自然... 高成生性质方法的地块的结构和材料转换可以使定性指标达到所需的条件值。 这将确保采用传统技术解决方案有效地开发矿床。 描述了水过滤的实验结果。 考虑了天然和技术成矿床的技术解决方案。

    C#剪裁图片有效区域代码

    通过过滤条件找到图片有效边缘,然后剪切

    浮选精煤加压过滤机入料泵安全运行的措施

    望峰岗选煤厂精煤加压过滤机入料泵因上料极少、加压仓内的高压混合气体反吹到入料泵内等原因导致了炸裂事故,为此采取了出料管上增设压力传感器、入料池上方加装摄像头等多项控制措施,有效避免了产生爆燃的条件。

    论文研究-分布式环境下的Skyline代表点查询.pdf

    与之相比,FDRA的改进在于过滤元组的选择,运用反馈方法,将每次动态更新最大评价函数值的点作为过滤元组,大大降低了计算代价,中心服务器每次只发送过滤元组到分布节点,这样可以尽早且最大限度地剪枝不可能成为...

    易佰长尾关键词查询工具 2013 v2.0.zip

    4) 允许用户设定查询结果的过滤条件,如查询的长尾词是否必须包含某词,或必须不包含某词。 5) 允许用户自由设定查询到的长尾词的相关指标,如该词当天的百度指数,当天搜索量等。 6) 支持查询结果自动保存到本地...

    论文研究-基于LBSN好友关系的个性化景点推荐方法.pdf

    改进传统协同过滤中相似用户计算和推荐方法,提出PTLR方法。通过用户景点照片矩阵计算用户偏好,结合好友亲密度信任关系计算相似邻居。利用多条件如兴趣偏好、景点时间适宜程度及候选周边关联景点产生推荐。实验结果...

    oracle语句优化方法.txt

    1) 选择最有效率的表名顺序(只在基于规则的优化器中有效)...ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

    Oracle数据库Sql语句详解大全

    第二章 条件查询 WHERE条件查询 在查询中使用表达式、运算符 使用LIKE、BETWEEN、IN进行模糊查询 第三章 单行函数 熟悉各种类型单行函数的使用 掌握转换函数的使用 第四章 关联查询 在一张或多张表中使用等值或非...

    SQLServer2008查询性能优化 2/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

    论文研究-加密数据库快速关键词查询技术.pdf

    提出一种安全查询方案,在不暴露敏感信息的情况下可获得符合查询条件的结果集。使用伪随机函数和Bloom过滤器,对敏感信息的关键词集合进行预处理,在数据库中生成相应的索引数据结构,支持不固定数量的关键词查询与...

    两层传感器网络中一种高效的加密数据条件聚合协议研究

    为了保护数据和查询条件的隐私性,提出了一种基于前缀成员确认和布鲁姆过滤器相结合的编码方法对数据和查询条件进行编码,实现存储节点在不知道数据真实值和查询条件真实值的情况下进行查询处理;为了对查询结果中的...

    详解AngularJS 过滤器的使用

    考评员综合查询,查询条件有:区域、所在单位、从事专业、资格证名称、有效期至。 如果我们的所有数据查询都放在后台的话。依据拼接的查询条件,选择区域、所在单位、从事专业查询的是人员表,而选择资格证名称、...

Global site tag (gtag.js) - Google Analytics