java实现以类为对象把各属性值放入map

最近的这个项目是使用的springMVC+mybatis,在service层往dao层传map的时候每次都要把Object的各个属性判断写一遍太麻烦了,就写了这么一个工具类。

它的作用是:将自定义的Object类中的个各属性当其值不为null时,以其属性名为key,对应的值为value存入一个map中返回

一、如何获取类的各个属性名

Class<?>有一个getDeclaredFields()方法,能获取Field数组

Field[] fields = obj.getClass().getDeclaredFields();
for(Field field : fields){
	String fieldName =  field.getName();
     String type = field.getType().toString();
        System.out.println("属性名:"+fieldName+"\t属性类型:"+type);
}

其实Field还有蛮多方法的,有兴趣的可以去问问百度。

二、通过属性名称获取该对象该属性所对应的值

这里我使用的是java的invoke反射

//获取该属性的get方法名称
String firstLetter=fieldName.substring(0,1).toUpperCase();
String getter = "get"+firstLetter+fieldName.substring(1);
try {
	Method method = object.getClass().getMethod(getter, new Class[]{});
	Object value = method.invoke(object, new Object[] {});  
	return value;
} catch (Exception e) {
	return null;
} 
其实可以看出来,这里的方法其实是有局限性的,我所获取的getter只适用于完全按照规范的get方法,并且该属性不能为Boolean。因为Boolean属性的get方法为isXxx()。

当然你可以更改get方法名称,但是我更推荐在代码逻辑上改,可以通过type判断属性类型,如果为Boolean就讲getter的拼接规则变一下。

三、将键值对放入map

这里因为我主要是做模糊查询,所以对String类型的值做了不同的操作,所以要判断属性类型。如果还有对其它类型(如:data)有要求的也应单独判断。因为很简单就直接附代码了。

public class ClassUtil {
	/**
	 * 将一个类查询方式加入map(属性值为int型时,0时不加入,
	 * 属性值为String型或Long时为null和“”不加入)
	 *
	 */
	public static Map<String, Object> setConditionMap(Object obj){
		Map<String, Object> map = new HashMap<String, Object>();
		if(obj==null){
			return null;
		}
		Field[] fields = obj.getClass().getDeclaredFields();
		for(Field field : fields){
			String fieldName =  field.getName();
			if(getValueByFieldName(fieldName,obj)!=null)
				map.put(fieldName,  getValueByFieldName(fieldName,obj));
		}
		
		return map;
		
	}
	/**
	 * 根据属性名获取该类此属性的值
	 * @param fieldName
	 * @param object
	 * @return
	 */
	private static Object getValueByFieldName(String fieldName,Object object){
		String firstLetter=fieldName.substring(0,1).toUpperCase();
		String getter = "get"+firstLetter+fieldName.substring(1);
		try {
			Method method = object.getClass().getMethod(getter, new Class[]{});
			Object value = method.invoke(object, new Object[] {});  
			return value;
		} catch (Exception e) {
			return null;
		} 
		
	}

}


  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值