`
周凡杨
  • 浏览: 234680 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Map 与 JavaBean之间的转换

阅读更多


最近项目里需要一个工具类,它的功能是传入一个Map后可以返回一个JavaBean对象。很喜欢写这样的Java服务,首先我想到的是要通过Java 的反射去实现匿名类的方法调用,这样才可以把Map里的值set JavaBean里。其实这里用Java的自省会更方便,下面两个方法就是一个通过反射,一个通过自省来实现本功能。

1:JavaBean


     package cn.com.bean;

     public class Person {

     private int id;

     private String name;

     private String birthday;

     private String type;

     private String hobby;

     public int getId() {

          return id;

10      }

11      public void setId(int id) {

12           this.id = id;

13      }

14      public String getName() {

15           return name;

16      }

17      public void setName(String name) {

18           this.name = name;

19      }

20      public String getBirthday() {

21           return birthday;

22      }

23      public void setBirthday(String birthday) {

24           this.birthday = birthday;

25      }

26      public String getType() {

27           return type;

28      }

29      public void setType(String type) {

30           this.type = type;

31      }

32      public String getHobby() {

33           return hobby;

34      }

35      public void setHobby(String hobby) {

36           this.hobby = hobby;

37      }

38      @Override

39      public String toString(){

40           StringBuffer sb = new StringBuffer();

41           sb.append("{");

42           sb.append("'id':'"+getId()+"',");

43           sb.append("'name':'"+getName()+"',");

44           sb.append("'type':'"+getType()+"',");

45           sb.append("'birthday':'"+getBirthday()+"',");

46           sb.append("'hobby':'"+getHobby()+"'");

47           sb.append("}");

48           return sb.toString();

49      }

50  }



2 工具类:


51      package cn.com.util;

52      import java.beans.BeanInfo;

53      import java.beans.IntrospectionException;

54      import java.beans.Introspector;

55      import java.beans.PropertyDescriptor;

56      import java.lang.reflect.Field;

57      import java.lang.reflect.InvocationTargetException;

58      import java.lang.reflect.Method;

59      import java.util.Map;

60      import java.util.Set;

61      public class ConvertUtil {

62  

63      /**

64       把一个Map转换成一个实体类JavaBean(通过反射机制实现)

65       * @param map

66       * @return

67       */                      public Object convertMayToBean(Map map) throws InstantiationException, IllegalAccessException{

68       if(map==null || map.size()==0){

69           return null;

70       }

71       if(map.get("table-name")==null){

72           return null;

73       }

74       String beanName = new ReadUtil().readString((String)map.get("table-name"));

75       if(beanName==null || "".equals(beanName))

76       {

77             return null;

78       }

79       Class clazz = null;

80       try {

81           clazz= Class.forName(beanName);

82       } catch (ClassNotFoundException e) {

83            e.printStackTrace();

84       }

85       Object object = clazz.newInstance();

86  

87       //获得对象的所有属性    

88       Field[] fields=clazz.getDeclaredFields();    

89       for(int i=0;i<fields.length;i++){

90           String key = fields[i].getName();

91           if(map.containsKey(key)){             

92           String tempKey = key.substring(0,1).toUpperCase()+key.substring(1,

93           key.length());

94           try {

95              Method method = clazz.getMethod("set"+tempKey,new Class[]                                                      {fields[i].getType()});

96              Object args[] = new Object[1];

97              args[0] = map.get(key);

98              method.invoke(object,args);

99           } catch (SecurityException e) {

100               e.printStackTrace();

101           } catch (NoSuchMethodException e) {

102               e.printStackTrace();

103           }catch (IllegalArgumentException e) {

104               e.printStackTrace();

105           } catch (IllegalAccessException e) {

106                 e.printStackTrace();

107            } catch (InvocationTargetException e) {

108                 e.printStackTrace();

109            }

110        }

111      }

112         return object;

113    }

114 

115        /**

116         * 下面通过内省实现

117         * @param map

118         * @return

119         */

120        public Object convertMap2Bean(Map<String, Object> map) throws IntrospectionException, 

121        InstantiationException, IllegalAccessException, IllegalArgumentException, 

122        InvocationTargetException, ClassNotFoundException{

123              if(map==null || map.size()==0){

124                   return null;

125              }

126              if(map.get("table-name")==null){

127                   return null;

128              }

129              String beanName = new ReadUtil().readString((String)map.get("table-name"));

130              if(beanName==null || "".equals(beanName))

131              {

132                   return null;

133              }

134              Class c = Class.forName(beanName);

135              Object obj=c.newInstance();

136              BeanInfo  beanInfo = Introspector.getBeanInfo(c);

137              PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();

138              Set<String> keys=map.keySet();

139              for (String key : keys) {

140                  for (PropertyDescriptor pd : pds) {

141                       if(pd.getName().equals(key)){

142                            pd.getWriteMethod().invoke(obj, map.get(key));

143                            break;

144                       }

145                  }

146              }

147        return obj;

148       }

149   }




150        

151 

152      package cn.com.util;

153      import java.io.IOException;

154      import java.io.InputStream;

155      import java.util.HashMap;

156      import java.util.Map;

157      import java.util.Properties;

158      public class ReadUtil {  

159          public String readString(String tableName){

160              InputStream in = ClassLoader.getSystemResourceAsStream("table-bean.properties");

161              Properties p = new Properties();

162              try {

163                  p.load(in);

164              } catch (IOException e) {

165                  e.printStackTrace();

166              }

167              return p.getProperty(tableName);

168           }

169      }





3 一个配置文件:table-bean.properties



        t_person_info=cn.com.bean.Person




4 测试类


170        import java.beans.BeanInfo;

171        import java.beans.IntrospectionException;

172        import java.beans.Introspector;

173        import java.beans.PropertyDescriptor;

174        import java.lang.reflect.InvocationTargetException;

175        import java.util.HashMap;

176        import java.util.Map;

177        import cn.com.bean.Person;

178        import cn.com.util.ConvertUtil;

179        public class Test {

180          

181         public static void main(String[] args) throws Exception {

182 

183               Map map = new HashMap();

184               map.put("id", 1111);

185               map.put("name", "zhou yang");

186               map.put("birthday", "1989-11-10");

187               map.put("type", "1");

188               map.put("hobby", "reading");

189               map.put("table-name", "t_person_info");

190               ConvertUtil util = new ConvertUtil();

191               //Object object = util.convertMayToBean(map);

192               // System.out.println(object.toString());

193               

194               Object object = util.convertMap2Bean(map);

195               System.out.println(object.toString());

196     

197                new Test().testJavaBeanInfo();

198          }

199        

200          //内省测试方法

201          public void testJavaBeanInfo() throws Exception{

202              Person p = new Person();

203              p.setBirthday("2011-10-20");

204              p.setId(007);

205              p.setName("吉它");

206              p.setType("2");

207              p.setHobby("弹吉它、看风景");

208   

209              BeanInfo bean = Introspector.getBeanInfo(p.getClass(),Object.class);

210   

211              PropertyDescriptor[] pds = bean.getPropertyDescriptors();

212              for(int i=0;i<pds.length;i++){

213                  System.out.print("name: "+pds[i].getName()+"   ");

214   

215              /**

216               * 下面这句invok(p,null),传参数为p,正好是上面的Person对象实例

217               * 表示调的就是上面的p对象的读方法(getXXX())

218               */

219              System.out.println(pds[i].getReadMethod().invoke(p,null));

220   

221         }

222     }

223 }





      JavaBean的内省就是对JavaBean中的属性和事件的一些处理方法,通过setNamegetName去访问和设置name的值。Java中通过Introspector类的getBeanInfo(beanClass)静态方法,获得JavaBeanBeanInfo集合,再遍历BeanInfo集合来得到JavaBean的某一个属性的属性描述器(PropertyDescriptor),利用PropertyDescriptor得到JavaBean中属性的getset方法。



前人总结,后人乘凉,但要有所思,才为已用。



0
2
分享到:
评论
2 楼 dq_java 2012-12-05  
引用
[url][/url]
1 楼 a346063587 2011-10-26  
恩。。。8错。。

相关推荐

    map与Javabean相互转换实例

    `Map`和`JavaBean`之间的转换就是一个典型的场景。`JavaBean`是一种符合特定规范的类,通常用来封装数据,而`Map`则是一种键值对的集合,两者在实际应用中有各自的适用范围。本文将深入探讨如何通过反射机制实现`Map...

    json转Map,转javaBean,javBean和Map转json

    在Java开发中,JSON(JavaScript Object ...通过这样的工具类,我们可以简化JSON、Map和JavaBean之间的转换过程,提高代码的可读性和可维护性。在实际开发中,了解并熟练掌握这些转换方法对于处理数据交互至关重要。

    JavaBean与map的互相转换

    使用Java反射机制,将给定的javaBean转化为Map数类型,以及将Map类型的数据转化为JavaBean

    json与JavaBean、Map和list之间的转换问题.doc

    JSON 与 JavaBean、Map 和 List 之间的转换问题 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。在 Java 开发中,经常需要将 JSON 数据与 JavaBean、Map ...

    将list转换成JavaBean

    将list&lt;Map&gt;转换成JavaBean的工具类

    Desktop_javaBean转换Map工具_

    将JavaBean转换为Map是一种常见的需求,特别是在处理数据绑定、JSON序列化或者存储时。标题“Desktop_javaBean转换Map工具_”暗示了这是一个方便的工具或代码片段,用于快速将JavaBean实例转换为Map对象。 描述中...

    Javabean和map相互转化方法代码示例

    Javabean和map相互转化方法代码示例 在 Java 开发中,经常需要将 JavaBean 对象和 Map 对象相互转换。例如,在导入数据时,可能需要将 Map 对象转换为 JavaBean 对象,以便更方便地处理数据。本文将介绍 JavaBean ...

    javabean_map_string和json互转详细文档+例子

    JavaBean和Map以及String与JSON之间的转换在Java开发中是非常常见的操作。这涉及到Java对象的序列化和反序列化,通常用于数据交换或持久化存储。以下是对这些转换的详细解释和示例。 1. JavaBean到JSON JavaBean是...

    xml 与JAVAbean转换

    **工具** 如Apache Commons BeanUtils库也可以用来在JavaBean和Map对象之间进行转换,虽然它不直接处理XML,但可以作为进一步转换的基础。此外,一些IDE如Eclipse和IntelliJ IDEA提供了内置的功能来自动生成JavaBean...

    Bean与Map转换工具类BeanMapConverter.java

    Bean与MAP间互转换的工具类。 1.将一个 Map 对象转化为一个 JavaBean,可指定BEAN的类型; 2.将一个 JavaBean 对象转化为一个 HashMap;

    List<Map>转化为List工具类

    一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List&lt;Map, Object&gt;&gt;结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List&lt;Map, Object&gt;&gt;转化为...

    JavaBean与Excel 数据行转换工具

    excel-bean 主要功能是 JavaBean 与 Excel 数据行之间的互相转换,普通项目中都会有Excel的导入导出功能,使用该工具可以大大提高工作效率,使开发者不必关系复杂的Excel解析。 主要解决 Excel 行类型数据与 ...

    优雅的对象转换解决方案,为什么更推荐MapStruct呢.docx

    总之,MapStruct提供了一种优雅的对象转换解决方案,它通过自动化代码生成,解决了传统JavaBean转换的痛点,提高了开发效率,降低了出错风险,并保持了代码的简洁性和可维护性。在现代Java开发中,MapStruct是一个...

    基于Java反射的map自动装配JavaBean工具类设计示例代码

    在上面的代码中,我们使用 Java 反射机制获取了 JavaBean 对象的所有字段信息,然后将这些字段信息与 Map 对象的键值对进行匹配,并将匹配的结果设置到 JavaBean 对象中。这样我们就可以将 Map 对象自动装配到 ...

    JavaBean和Map转换封装类的方法

    在Java中,我们可以使用反射机制将JavaBean转换为Map,反之亦然。以下是一个简单的封装类`MapUtils`,提供了两个主要的方法: 1. `map2Java`: 这个方法用于将Map对象转换为JavaBean对象。它接受一个JavaBean实例和...

    用于将map转换成对象的jar包

    如果有一个Map对象,其中包含了与Person类属性相对应的键值对,我们可以这样转换: ```java Map, Object&gt; map = new HashMap(); map.put("name", "张三"); map.put("age", 25); Person person = new Person(); ...

    首字母大写的json串转为javabean实例

    首先,解析JSON字符串到`Map, Object&gt;`,然后遍历这个映射,将键(属性名)转换为驼峰式,并创建对应的JavaBean实例,设置属性值。 5. **使用工具类或方法**:可以创建一个静态方法或者工具类,接收JSON字符串和...

    java中用ObjectMapper类实现Json与bean的转换示例

    主要给大家介绍了关于在java中用ObjectMapper类实现Json与bean转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。

    JavaBean2Map-开源

    JavaBean2Map将JavaBean转换为Map,便于在不关心对象实例的情况下操作属性。 3. **XML配置驱动**: XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,常用于配置文件。在JavaBean2Map中,XML...

    Dozer一个JavaBean至JavaBean映射器

    **Dozer:JavaBean到JavaBean的映射神器** Dozer是Java开发中的一款强大工具,主要用于Java Bean之间的数据映射。它简化了在不同对象模型之间传递数据的过程,尤其在处理复杂对象结构时,其功能显得尤为重要。Dozer...

Global site tag (gtag.js) - Google Analytics