Map 转 Bean以及bean转map

本文介绍了一种实用的方法,用于将Java对象转换为Map集合,以及将Map集合的数据填充到Java对象中。通过反射机制,实现了属性的自动匹配与设置,适用于ORM操作和JSON数据解析场景。

public static boolean transMap2Bean(Map<String, Object> map, Object obj)
    {
        try
        {
            java.lang.reflect.Field[] fileds = obj.getClass().getDeclaredFields();
            for(int i=0;i<fileds.length;i++)
            {
                String key = fileds[i].getName();
                Object value = map.get(key);
                if (value != null )
                {
                     Method setter = obj.getClass().getMethod("set"+key.substring(0, 1).toUpperCase()+key.substring(1), fileds[i].getType());
                    setter.invoke(obj, value);
                    
                }
            }
        }
        catch (Exception e)
        {
            System.out.println("transMap2Bean Error " + e);
            e.printStackTrace();
            return false;
        }
        
        return true;
        
    }

 

 

 

 

 

public void transfObjectToMap(Map<String,String> map,Object obj) throws Exception
    {
        
        Class<?> c = Class.forName(obj.getClass().getName());
        Method[] m = c.getMethods();
        for(int i=0;i<m.length;i++){
            String method = m[i].getName();
            if(method.startsWith("get"))
            {    
                if(m[i].getReturnType().equals(String.class))
                {    
                    if(!method.equals("getCz"))
                    {
                    String value = (String)(m[i].invoke(obj)==null?"":m[i].invoke(obj));        
                    String key = method.substring(3);
                    key=key.substring(0,1).toUpperCase()+key.substring(1);
                    map.put(key.toLowerCase(), value);
                    }
                }
            }
        }
        
    }

在Java中,将`Map`数据结构换为`Bean`对象是一个常见的需求,尤其是在处理数据传输和业务逻辑层之间的数据映射时。以下是几种常见的实现方法: ### 使用Jackson库进行MapBean Jackson是一个广泛使用的Java库,用于处理JSON数据,并支持将`Map`换为`Bean`对象。通过`ObjectMapper`类的`convertValue`方法可以轻松实现这一换: ```java ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> map = new HashMap<>(); // 假设map已经被填充了数据 EmployeeVo employeeVo = objectMapper.convertValue(map, EmployeeVo.class); ``` 这种方法简单且高效,适用于大多数场景,尤其是当`Map`中的键与`Bean`的属性名称相匹配时[^3]。 ### 使用BeanMap进行换 `BeanMap`是Apache Commons BeanUtils库的一部分,提供了一种将Java Bean换为`Map`的方法,同时也支持反向换。通过`BeanMap`类,可以将`Map`数据映射回`Bean`对象: ```java BeanMap beanMap = new BeanMap(employeeVo); beanMap.putAll(map); // map是包含属性值的Map ``` 这种方法的优点在于其灵活性,允许对换过程进行更细粒度的控制,适合处理复杂的换需求[^2]。 ### 使用反射机制手动实现换 对于特定的需求或性能敏感的应用场景,可以通过Java反射机制手动实现`Map`到`Bean`的换。这涉及到获取`Bean`类的所有字段,然后遍历`Map`条目,设置相应的字段值: ```java public static <T> T mapToBean(Map<String, Object> map, Class<T> beanClass) throws Exception { T bean = beanClass.getDeclaredConstructor().newInstance(); for (Map.Entry<String, Object> entry : map.entrySet()) { Field field = beanClass.getDeclaredField(entry.getKey()); field.setAccessible(true); field.set(bean, entry.getValue()); } return bean; } ``` 虽然这种方式需要更多的代码编写,但它提供了最大的灵活性和控制能力,适用于需要高度定制化的换逻辑的情况[^1]。 ### 使用MapStruct进行对象MapStruct是一个代码生成器,它简化了不同Java Bean类型之间的映射。通过定义映射接口,MapStruct可以在编译时生成高效的换代码: ```java @Mapper public interface CarMapper { CarMapper INSTANCE = Mappers.getMapper(CarMapper.class); @Mapping(source = "numberOfSeats", target = "seatCount") CarDto carToCarDto(Car car); } ``` 尽管MapStruct主要用于Bean之间的换,但结合其他工具(如Jackson),也可以间接实现`Map`到`Bean`的换。例如,首先将`Map`换为中间`Bean`,再利用MapStruct完成最终的换[^4]。 以上方法各有优劣,选择合适的方法取决于具体的应用场景、性能要求及开发者的偏好。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值