Java中Bean与Map/Json/DBObject的相互转换

阅读更多

1.JavaBean

 

[java]  view plain  copy
 
  1. public class Person {  
  2.   
  3.     private String name;  
  4.     private Integer age;  
  5.     private String job;  
  6.     private List school;  
  7.     private String address;  
  8.     private List score;  
  9.     //省略get/set方法  
  10. }  

 

[java]  view plain  copy
 
  1. public class Score {  
  2.   
  3.     private String cource_name;  
  4.     private Integer cource_score;  
  5.     //省略get/set方法  
  6. }  


2.JavaBean与Map相互转换(使用Apache Commons的BeanUtil实现)

 

 

[java]  view plain  copy
 
  1.        //Map转成JavaBean  
  2. //测试已通过,Bean中包含另一个Bean成员也可以  
  3. public static Object transMap2Bean(Map map, Object obj) {  
  4.     if (map == null || obj == null) {  
  5.         return null;BeanUtils  
  6.     }  
  7.     try {  
  8.         BeanUtils.populate(obj, map);  
  9.     } catch (Exception e) {  
  10.         e.printStackTrace();  
  11.         return null;  
  12.     }  
  13.     return obj;  
  14. }  
  15.   
  16. //JavaBean转成Map  
  17. //测试已通过,Bean中包含另一个Bean成员也可以  
  18. public static Map transBean2Map(Object obj) {  
  19.   
  20.     if (obj == null) {  
  21.         return null;  
  22.     }  
  23.     Map map = new HashMap();  
  24.     try {  
  25.         BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());  
  26.         PropertyDescriptor[] propertyDescriptors = beanInfo  
  27.                 .getPropertyDescriptors();  
  28.         for (PropertyDescriptor property : propertyDescriptors) {  
  29.             String key = property.getName();  
  30.   
  31.             // 过滤class属性  
  32.             if (!key.equals("class")) {  
  33.                 // 得到property对应的getter方法  
  34.                 Method getter = property.getReadMethod();  
  35.                 Object value = getter.invoke(obj);  
  36.   
  37.                 map.put(key, value);  
  38.             }  
  39.   
  40.         }  
  41.     } catch (Exception e) {  
  42.         e.printStackTrace();  
  43.         return null;  
  44.     }  
  45.   
  46.     return map;  
  47.   
  48. }  


3.JavaBean与Json相互转换(使用JSONObject实现,需要导入json-lib.jar)

 

 

[java]  view plain  copy
 
  1.        //json字符串转成JavaBean  
  2. //测试已通过  
  3. @SuppressWarnings("unchecked")  
  4. public static  T json2Bean(String jsonString, Class beanCalss) {  
  5.            JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  6.            T bean = (T) JSONObject.toBean(jsonObject, beanCalss);  
  7.           
  8.            return bean;  
  9.        }  
  10.   
  11. //JavaBean转成json字符串  
  12. //测试已通过  
  13. public static String beanToJson(Object bean) {  
  14.            JSONObject json = JSONObject.fromObject(bean);  
  15.            return json.toString();  
  16.    }  


4.JavaBean与DBObject相互转换(DBObject是MongoDB在Java驱动是使用的类)

 

 

[java]  view plain  copy
 
  1.        //DBObject转换成JavaBean  
  2. //测试已通过  
  3. public static  T dbObject2Bean(DBObject dbObject, T bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {    
  4.            if (bean == null) {  //测试已通过  
  5.                return null;    
  6.            }    
  7.            Field[] fields = bean.getClass().getDeclaredFields();    
  8.            for (Field field : fields) {    
  9.                String varName = field.getName();    
  10.                Object object = dbObject.get(varName);    
  11.                if (object != null) {    
  12.                    BeanUtils.setProperty(bean, varName, object);    
  13.                }    
  14.            }    
  15.            return bean;    
  16.        }  
  17.   
  18.        @SuppressWarnings("unchecked")  
  19. public static  DBObject bean2DBObject(T bean) throws IllegalArgumentException, IllegalAccessException {  
  20.     if (bean == null) {  
  21.         return null;  
  22.     }  
  23.     DBObject dbObject = new BasicDBObject();  
  24.     // 获取对象对应类中的所有属性域  
  25.     Field[] fields = bean.getClass().getDeclaredFields();  
  26.     for (Field field : fields) {  
  27.         // 获取属性名  
  28.         String varName = field.getName();  
  29.         // 修改访问控制权限  
  30.         boolean accessFlag = field.isAccessible();  
  31.         if (!accessFlag) {  
  32.             field.setAccessible(true);  
  33.         }  
  34.         Object param = field.get(bean);  
  35.         if (param == null) {  
  36.             continue;  
  37.         } else if (param instanceof Integer) {// 判断变量的类型  
  38.             int value = ((Integer) param).intValue();  
  39.             dbObject.put(varName, value);  
  40.         } else if (param instanceof String) {  
  41.             String value = (String) param;  
  42.             dbObject.put(varName, value);  
  43.         } else if (param instanceof Double) {  
  44.             double value = ((Double) param).doubleValue();  
  45.             dbObject.put(varName, value);  
  46.         } else if (param instanceof Float) {  
  47.             float value = ((Float) param).floatValue();  
  48.             dbObject.put(varName, value);  
  49.         } else if (param instanceof Long) {  
  50.             long value = ((Long) param).longValue();  
  51.             dbObject.put(varName, value);  
  52.         } else if (param instanceof Boolean) {  
  53.             boolean value = ((Boolean) param).booleanValue();  
  54.             dbObject.put(varName, value);  
  55.         } else if (param instanceof Date) {  
  56.             Date value = (Date) param;  
  57.             dbObject.put(varName, value);  
  58.         } else if (param instanceof List) {  
  59.             List list = (List) param;  
  60.             dbObject.put(varName, list);  
  61.         } else if (param instanceof Map) {  
  62.             Map map = (Map) param;  
  63.             dbObject.put(varName, map);  
  64.         }  
  65.         // 恢复访问控制权限  
  66.         field.setAccessible(accessFlag);  
  67.     }  
  68.     return dbObject;  
  69. }  
  70.  

    5.测试代码

    [java]  view plain  copy
     
    1. package test;  
    2.   
    3. import java.lang.reflect.InvocationTargetException;  
    4. import java.util.ArrayList;  
    5. import java.util.HashMap;  
    6. import java.util.List;  
    7. import java.util.Map;  
    8.   
    9. import org.junit.Before;  
    10. import org.junit.Test;  
    11.   
    12. import com.mongodb.BasicDBObject;  
    13. import com.mongodb.DBObject;  
    14. import com.zmy.bean.Person;  
    15. import com.zmy.bean.Score;  
    16. import com.zmy.util.BeanUtil;  
    17. import com.zmy.util.DBObjectUtil;  
    18.   
    19. public class ConvertTest {  
    20.   
    21.     private Person person = null;  
    22.     private Map map = null;  
    23.       
    24.     @Before  
    25.     public void initBean(){  
    26.         person = new Person();  
    27.         Score score1 = new Score();  
    28.         Score score2 = new Score();  
    29.         person.setAddress("大连");  
    30.         person.setAge(21);  
    31.         person.setJob("coder");  
    32.         person.setName("zmy");  
    33.         List schools = new ArrayList();  
    34.         List scores = new ArrayList();  
    35.         schools.add("DLUT");  
    36.         score1.setCource_name("course1");  
    37.         score1.setCource_score(85);  
    38.         score2.setCource_name("course2");  
    39.         score2.setCource_score(80);  
    40.         scores.add(score1);  
    41.         scores.add(score2);  
    42.         person.setSchool(schools);  
    43.         person.setScore(scores);  
    44.     }  
    45.       
    46.     @Before  
    47.     public void initMap(){  
    48.         map = new HashMap();  
    49.         map.put("address""大连");  
    50.         map.put("name""zmy");  
    51.         map.put("job""coder");  
    52.         map.put("age"21);  
    53.         List schools = new ArrayList();  
    54.         schools.add("DLUT");  
    55.         schools.add("HUK");  
    56.         map.put("school", schools);  
    57.         List scores = new ArrayList();  
    58.         Score score1 = new Score();  
    59.         Score score2 = new Score();  
    60.         score1.setCource_name("course1");  
    61.         score1.setCource_score(85);  
    62.         score2.setCource_name("course2");  
    63.         score2.setCource_score(80);  
    64.         scores.add(score1);  
    65.         scores.add(score2);  
    66.         map.put("score", scores);  
    67.     }  
    68.       
    69.     @Test  
    70.     public void testBean2Map(){  
    71.         Map map = BeanUtil.transBean2Map(person);  
    72.         System.out.println(map.toString());  
    73.     }  
    74.       
    75.     @Test  
    76.     public void testMap2Bean(){  
    77.         Person person = (Person) BeanUtil.transMap2Bean(map, new Person());  
    78.         System.out.println(person.getName());  
    79.     }  
    80.       
    81.     @Test  
    82.     public void testBean2Json(){  
    83.         String json = BeanUtil.beanToJson(person);  
    84.         System.out.println(json);  
    85.           
    86.         Person person2 = BeanUtil.json2Bean(json, Person.class);  
    87.         System.out.println(person2.getName());  
    88.     }  
    89.       
    90.     @Test  
    91.     public void testDBObject2Bean(){  
    92.         DBObject dbObject = new BasicDBObject(map);  
    93.         try {  
    94.             Person p = BeanUtil.dbObject2Bean(dbObject, new Person());  
    95.             System.out.println(p.getName());  
    96.         } catch (IllegalAccessException | InvocationTargetException  
    97.                 | NoSuchMethodException e) {  
    98.             // TODO Auto-generated catch block  
    99.             e.printStackTrace();  
    100.             System.out.println("转换error!!!");  
    101.         }  
    102.           
    103.     }  
    104.       
    105.     @Test  
    106.     public void testBean2DBObject(){  
    107.         try {  
    108.             DBObject dbObject = DBObjectUtil.bean2DBObject(person);  
    109.             System.out.println(dbObject.get("score"));  
    110.             System.out.println(person.getScore());  
    111.         } catch (IllegalArgumentException | IllegalAccessException e) {  
    112.             // TODO Auto-generated catch block  
    113.             e.printStackTrace();  
    114.             System.out.println("转换error!!!");  
    115.         }  
    116.     }  
    117. }  

    你可能感兴趣的:(Mongodb)