Map与Bean互转(下划线转大写)

来源:互联网 发布:java游戏大全百度网盘 编辑:程序博客网 时间:2024/06/06 03:03
import java.beans.BeanInfo;  import java.beans.Introspector;  import java.beans.PropertyDescriptor;  import java.lang.reflect.Method;  import java.util.HashMap;  import java.util.Map;   import org.apache.commons.beanutils.BeanUtils;  /**  *  Map与Bean互转 *  * * 当把Person类作为BeanUtilTest的内部类时,程序出错<br> * java.lang.NoSuchMethodException: Property '**' has no setter method<br> * 本质:内部类 和 单独文件中的类的区别 <br> * BeanUtils.populate方法的限制:<br> * The class must be public, and provide a public constructor that accepts no arguments. <br> * This allows tools and applications to dynamically create new instances of your bean, <br> * without necessarily knowing what Java class name will be used ahead of time */  public class MapBeanConvertUtil {      /**    * <p class="detail">    * 功能:Map --> Bean 2: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean      * 推荐使用    * </p>    * @author wuxw    * @param map    * @param obj     * @throws    */   public static void transMap2Bean(Map<String, Object> map, Object obj) {         if (map == null || obj == null) {             return;         }         try {             BeanUtils.populate(obj, map);         } catch (Exception e) {             System.out.println("transMap2Bean2 Error " + e);         }     }      // Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean     public static void transMap2Bean2(Map<String, Object> map, Object obj) {          try {             BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();              for (PropertyDescriptor property : propertyDescriptors) {                 String key = property.getName();                  if (map.containsKey(key)) {                     Object value = map.get(key);                     // 得到property对应的setter方法                     Method setter = property.getWriteMethod();                     setter.invoke(obj, value);                 }              }          } catch (Exception e) {             System.out.println("transMap2Bean Error " + e);         }          return;      }        /**    * <p class="detail">    * 功能: Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean     * 固定hibernateBean类型转换:  user_name 转 userName ,注意严格验证参数     *     * </p>    * @author wuxw    * @param map    * @param obj     * @throws    */   public static void transMap2HiberanteBean(Map<String, Object> map, Object obj) {          try {             BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();              for (PropertyDescriptor property : propertyDescriptors) {                 String key = property.getName();                 //将key中大写字符转为_大写               key = underscoreName(key);                              if (map.containsKey(key)) {                     Object value = map.get(key);                     // 得到property对应的setter方法                     Method setter = property.getWriteMethod();                     setter.invoke(obj, value);                 }              }          } catch (Exception e) {             System.out.println("transMap2Bean Error " + e);         }          return;      }          // Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Map     public static Map<String, Object> transBean2Map(Object obj) {          if(obj == null){             return null;         }                 Map<String, Object> map = new HashMap<String, Object>();         try {             BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();             for (PropertyDescriptor property : propertyDescriptors) {                 String key = property.getName();                 // 过滤class属性                 if (!key.equals("class")) {                     // 得到property对应的getter方法                     Method getter = property.getReadMethod();                     Object value = getter.invoke(obj);                      map.put(key, value);                 }              }         } catch (Exception e) {             System.out.println("transBean2Map Error " + e);         }          return map;      }        /**    * <p class="detail">    * 功能:将大写转为下划线,且小写 如: userName > user_name    * </p>    * @author wuxw    * @param name    * @return     * @throws    */   static String underscoreName(String name)     {       StringBuilder result = new StringBuilder();       if ((name != null) && (name.length() > 0)) {         result.append(name.substring(0, 1).toLowerCase());         for (int i = 1; i < name.length(); ++i) {           String s = name.substring(i, i + 1);           if (s.equals(s.toUpperCase())) {             result.append("_");             result.append(s.toLowerCase());           }           else {             result.append(s);           }         }       }       return result.toString();     }} 
原创:点击打开链接
原创粉丝点击