package com.qxueyou.scc.base.util; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.PropertyUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * Bean 工具类 * @author 夏德虎 * */ public class QBeanUtils { private static final Logger log = LogManager.getLogger("QBeanUtils"); /** * 将 Bean 转换成 Map,支持 将 id 转换为 id1 * @param src bean对象 * @param propertyMap 字段映射 * @return */ public static final Map bean2Map(T src,Map propertyMap) { Map result=null; try { result = new HashMap(10); for(String key:propertyMap.keySet()) { Object value = null; if(key.contains(".")) { String[] keys = key.split("\\."); value = PropertyUtils.getProperty(PropertyUtils.getProperty(src, keys[0]),keys[1]); result.put(propertyMap.get(key), value); }else { value = PropertyUtils.getProperty(src, key); } if(propertyMap.get(key).contains(",")) { String[] destKeys = propertyMap.get(key).split(","); for(String destKey:destKeys) { result.put(destKey, value); } }else { result.put(propertyMap.get(key), value); } } } catch (IllegalAccessException e) { log.error(e,e); } catch (InvocationTargetException e) { log.error(e,e); } catch (NoSuchMethodException e) { log.error(e,e); } return result; } /** * 将List 转换成 List,支持 将 id 转换为 id1 * @param src List对象 * @param propertyMap 字段映射 * @return */ public static final List> listBean2ListMap(List src,Map propertyMap) { if(src==null || src.isEmpty()){ return new ArrayList>(); } List> result = new ArrayList>(src.size()*2); for(T t:src) { result.add(bean2Map(t,propertyMap)); } return result; } /** * 将List 转换成 List,支持 将 id 转换为 id1 * @param src List对象 * @param propertyMap 字段映射 * @return * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalAccessException */ @SuppressWarnings("unchecked") public static final List listPropertyVal(List src,String propName){ if(src==null || src.size()==0){ return null; } List result = new ArrayList(src.size()); try{ for(T t:src){ V value = null; if(propName.contains(".")) { String[] propertyNames = propName.split("\\."); value = (V) PropertyUtils.getProperty(PropertyUtils.getProperty(t, propertyNames[0]),propertyNames[1]); }else { value = (V) PropertyUtils.getProperty(t, propName); } result.add(value); } } catch (IllegalAccessException e) { log.error(e,e); } catch (InvocationTargetException e) { log.error(e,e); } catch (NoSuchMethodException e) { log.error(e,e); } return result; } /** * 将bean列表中的一个属性值作为KEY,另一个属性值作为value * @param src * @param propertyKey * @param propertyVal * @return * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalAccessException */ @SuppressWarnings("unchecked") public static final Map mapProperty(List src,String keyProp,String valProp){ if(src==null || src.size()==0){ return null; } Map result = new HashMap(src.size()); try{ for(T t:src){ K key = null; V val = null; if(keyProp.contains(".")) { String[] keyProps = keyProp.split("\\."); key = (K) PropertyUtils.getProperty(PropertyUtils.getProperty(t, keyProps[0]),keyProps[1]); }else { key = (K) PropertyUtils.getProperty(t, keyProp); } if(valProp.contains(".")) { String[] valProps = valProp.split("\\."); val = (V) PropertyUtils.getProperty(PropertyUtils.getProperty(t, valProps[0]),valProps[1]); }else { val = (V) PropertyUtils.getProperty(t, valProp); } result.put(key, val); } } catch (IllegalAccessException e) { log.error(e,e); } catch (InvocationTargetException e) { log.error(e,e); } catch (NoSuchMethodException e) { log.error(e,e); } return result; } /** * 将Object 挑选指定属性转换成 Map * @param src 源目标 * @param propertyMap 字段映射 * @return */ public static final Map copyPropertiesToMap(Object src,Map propertyMap) { Map dest = new HashMap(propertyMap.size()*2); try { for(String key:propertyMap.keySet()) { dest.put(propertyMap.get(key),PropertyUtils.getProperty(src, key)); } } catch (IllegalAccessException e) { log.error(e,e); } catch (InvocationTargetException e) { log.error(e,e); } catch (NoSuchMethodException e) { log.error(e,e); } return dest; } }