1.利用BeanMap进行对象与Map的相互转换

javabean与map的转换有很多种方式,比如:

1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用

2、通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦

3、通过net.sf.cglib.beans.BeanMap类中的方法,这种方式效率极高,它跟第二种方式的区别就是因为使用了缓存,初次创建bean时需要初始化,之后就使用缓存,

所以速度极快,经测试,循环bean和map的转换10000次,仅需要300毫秒左右。

所以,推荐第3种方式。  以下是相关代码:

1/** 2* 将对象装换为map 3* @param bean 4* @return 5*/ 6public static <T> Map<String, Object> beanToMap(T bean) { 7  Map<String, Object> map = Maps.newHashMap(); 8  if (bean != null) { 9    BeanMap beanMap = BeanMap.create(bean); 10    for (Object key : beanMap.keySet()) { 11    map.put(key+"", beanMap.get(key)); 12  } 13} 14return map; 15} 16 17/** 18* 将map装换为javabean对象 19* @param map 20* @param bean 21* @return 22*/ 23public static <T> T mapToBean(Map<String, Object> map,T bean) { 24  BeanMap beanMap = BeanMap.create(bean); 25  beanMap.putAll(map); 26  return bean; 27} 28 29/** 30* 将List<T>转换为List<Map<String, Object>> 31* @param objList 32* @return 33* @throws JsonGenerationException 34* @throws JsonMappingException 35* @throws IOException 36*/ 37public static <T> List<Map<String, Object>> objectsToMaps(List<T> objList) { 38  List<Map<String, Object>> list = Lists.newArrayList(); 39  if (objList != null && objList.size() > 0) { 40    Map<String, Object> map = null; 41    T bean = null; 42    for (int i = 0,size = objList.size(); i < size; i++) { 43      bean = objList.get(i); 44      map = beanToMap(bean); 45      list.add(map); 46    } 47  } 48  return list; 49} 50 51/** 52* 将List<Map<String,Object>>转换为List<T> 53* @param maps 54* @param clazz 55* @return 56* @throws InstantiationException 57* @throws IllegalAccessException 58*/ 59public static <T> List<T> mapsToObjects(List<Map<String, Object>> maps,Class<T> clazz) throws InstantiationException, IllegalAccessException { 60  List<T> list = Lists.newArrayList(); 61  if (maps != null && maps.size() > 0) { 62    Map<String, Object> map = null; 63    T bean = null; 64    for (int i = 0,size = maps.size(); i < size; i++) { 65      map = maps.get(i); 66      bean = clazz.newInstance(); 67      mapToBean(map, bean); 68      list.add(bean); 69    } 70} 71return list; 72}

BeanUtils.populate的用法

BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下:

完整方法:

BeanUtils.populate( Object bean, Map properties ),

这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性。

源代码:

public void populate(Object bean, Map properties) throws IllegalAccessException, InvocationTargetException {    if (bean != null && properties != null) {                Iterator entries = properties.entrySet().iterator();        while(entries.hasNext()) {            Entry entry = (Entry)entries.next();            String name = (String)entry.getKey();            if (name != null) {                this.setProperty(bean, name, entry.getValue());            }        }    }}

原文:https://blog.csdn.net/q358543781/article/details/50176953

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

java8新特性

Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str

1.利用BeanMap进行对象与Map的相互转换 - HelloWorld