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

来源:互联网 发布:淘宝联盟能分享到qq群 编辑:程序博客网 时间:2024/06/05 11:08

最近的这个项目是使用的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;} }}


0 0