`

Map 对象与 JavaBean 对象互转工具类

    博客分类:
  • Java
阅读更多
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.beanutils.BeanUtils;

/**
 * Map 对象与 JavaBean 对象互转工具类
 * 
 * @author xl.liu
 */
public class BeanToMapUtil<T> {

    private final static String UNDERLINE = "_";

    private BeanToMapUtil() {
        // 私有的构造方法
    }

    /**
     * 将 Map对象转化为JavaBean
     * 
     * @param map
     * @param T
     * @return
     * @throws Exception
     * @see [类、类#方法、类#成员]
     */
    public static <T> T convertMap2Bean(Map<String, Object> map, Class<T> T) throws Exception {
        if (map == null || map.size() == 0) {
            return null;
        }
        // 获取map中所有的key值,全部更新成大写,添加到keys集合中,与mybatis中驼峰命名匹配
        Object mvalue = null;
        Map<String, Object> newMap = new HashMap<>();
        Iterator<Entry<String, Object>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            String key = it.next().getKey();
            mvalue = map.get(key);
            if (key.indexOf(BeanToMapUtil.UNDERLINE) != -1) {
                key = key.replaceAll(BeanToMapUtil.UNDERLINE, "");
            }
            newMap.put(key.toUpperCase(Locale.US), mvalue);
        }

        BeanInfo beanInfo = Introspector.getBeanInfo(T);
        T bean = T.newInstance();
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (int i = 0, n = propertyDescriptors.length; i < n; i++) {
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            String upperPropertyName = propertyName.toUpperCase();

            if (newMap.keySet().contains(upperPropertyName)) {
                Object value = newMap.get(upperPropertyName);
                // 这个方法不会报参数类型不匹配的错误。
                BeanUtils.copyProperty(bean, propertyName, value);
            }
        }
        return bean;
    }

    /**
     * 将一个 JavaBean 对象转化为一个 Map
     * 
     * @param bean
     * @return
     * @throws IntrospectionException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     * @see [类、类#方法、类#成员]
     */
    public static Map<String, Object> convertBean2Map(Object bean)
            throws IntrospectionException, IllegalAccessException, InvocationTargetException {
        Class<? extends Object> type = bean.getClass();
        Map<String, Object> returnMap = new HashMap<>();
        BeanInfo beanInfo = Introspector.getBeanInfo(type);

        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (int i = 0; i < propertyDescriptors.length; i++) {
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            if (!"class".equals(propertyName)) {
                Method readMethod = descriptor.getReadMethod();
                Object result = readMethod.invoke(bean, new Object[0]);
                if (result != null) {
                    returnMap.put(propertyName, result);
                } else {
                    returnMap.put(propertyName, null);
                }
            }
        }
        return returnMap;
    }

    /**
     * 将 List<Map>对象转化为List<JavaBean>
     * 
     * @param listMap
     * @param T
     * @return
     * @throws Exception
     * @see [类、类#方法、类#成员]
     */
    public static <T> List<T> convertListMap2ListBean(List<Map<String, Object>> listMap, Class<T> T)
            throws Exception {
        List<T> beanList = new ArrayList<>();
        if (listMap != null && !listMap.isEmpty()) {
            for (int i = 0, n = listMap.size(); i < n; i++) {
                Map<String, Object> map = listMap.get(i);
                T bean = convertMap2Bean(map, T);
                beanList.add(bean);
            }
            return beanList;
        }
        return beanList;
    }

    /**
     * 将 List<JavaBean>对象转化为List<Map>
     * 
     * @param beanList
     * @return
     * @throws Exception
     * @see [类、类#方法、类#成员]
     */
    public static <T> List<Map<String, Object>> convertListBean2ListMap(List<T> beanList,
            Class<T> T) throws Exception {
        List<Map<String, Object>> mapList = new ArrayList<>();
        for (int i = 0, n = beanList.size(); i < n; i++) {
            Object bean = beanList.get(i);
            Map<String, Object> map = convertBean2Map(bean);
            mapList.add(map);
        }
        return mapList;
    }
}

 

分享到:
评论

相关推荐

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

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

    Bean与Map转换工具类BeanMapConverter.java

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

    map与Javabean相互转换实例

    `collectionUtils`可能是提供这些转换功能的一个工具类,包含了一系列关于集合操作的实用方法,包括`Map`和`JavaBean`的转换。在实际项目中,这样的工具类能帮助开发者提高代码的可读性和可维护性,避免重复编写转换...

    对象与map互相转换工具类

    对象与map互相转换工具类

    List<Map>转化为List工具类

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

    将list转换成JavaBean

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

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

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

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

    基于Java反射的map自动装配JavaBean工具类设计示例代码 标题 :"基于Java反射的map自动装配JavaBean工具类设计示例代码" 在 Java 开发中,经常需要将 Map 对象自动装配到 JavaBean 对象中,例如在使用 MyBatis 时...

    Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类

    BeanUtil工具类的常用方法一般包括`populate()`或`fillProperties()`等,这些方法接受一个JavaBean实例和一个Map对象作为参数。Map对象中包含了请求参数,键为参数名,值为参数值。工具类通过反射遍历JavaBean的所有...

    JAVA-JSON工具转换类

    `JsonUtil.java`看起来是一个自定义的工具类,很可能包含了对`json-lib`和`ezmorph`的封装,提供了简洁易用的API供开发者进行JSON操作。可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`...

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

    `commons-beanutils-1.8.0.jar`是Apache Commons BeanUtils的核心库,它提供了一系列实用工具类,帮助开发者处理JavaBean操作。其中,最常用的功能之一就是将Map转换为JavaBean对象,这极大地减少了手动转换的繁琐...

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

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

    xml生成javabean工具

    在已经有xml的情况下,快速生成javabean代码,不需要自己再手打大量无聊的代码。

    List转换成Map工具类的简单实例

    这个工具类的实例可以用于任何场景,其中List中的对象具有特定属性,我们可以利用该属性作为Map的键。例如,如果我们有一个`Person`类,包含`id`和`name`属性,我们可以将一个`Person`对象的列表转换为以`id`为键的...

    Java代码实现Map和Object互转及Map和Json互转

    BeanUtils是一种帮助程序员操作JavaBean的工具类。在classA的mapToObject方法中,通过BeanUtils.populate静态方法可以将Map中的键值对填充到新创建的Java对象的对应属性中。这里的键名需要与JavaBean的属性名相匹配...

    使用第三方工具将各种对象转成json格式

    1. **JavaBean对象转JSON** JavaBean是一种遵循特定规范的Java类,通常用于封装数据。将JavaBean对象转为JSON时,我们可以使用如Jackson、Gson、Fastjson等流行的JSON库。以Jackson为例,首先需要引入Jackson库的...

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...

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

    MapStruct是一种高效的对象映射框架,它通过注解处理器自动生成类型安全、高性能且无依赖的JavaBean映射代码。在Java开发中,JavaBean之间的转换通常是一个繁琐的任务,尤其是在大型项目中,大量的转换代码不仅影响...

    xml 与JAVAbean转换

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

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

    5. **使用工具类或方法**:可以创建一个静态方法或者工具类,接收JSON字符串和JavaBean的Class类型作为参数,内部实现转换逻辑,这样在项目中可以复用。 6. **代码示例**:对于Gson库,可以创建一个自定义`...

Global site tag (gtag.js) - Google Analytics