码迷,mamicode.com
首页 > 其他好文 > 详细

Bean熟悉替换,只替换部分属性,其他属性值不改变

时间:2016-08-17 01:27:56      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

Bean熟悉替换,只替换部分属性,其他属性值不改变

需要加入:asm.jar  cglib-2.1.jar,用来map和bean之间的转换(比spring和反射的效率好,因为加入了缓存)

 

package com.bean.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.cglib.beans.BeanMap;



public class CopyBean {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        User u1 = new User();
        u1.setId(1);
        u1.setName("用户1");
        u1.setPwd("12333");
        u1.setAddress("杭州西湖区");
        GirlFriend girl11 = new GirlFriend("范冰冰");
        GirlFriend girl12 = new GirlFriend("林心如");
        List<GirlFriend> list1 = new ArrayList<GirlFriend>();
        list1.add(girl11);
        list1.add(girl12);
        u1.setGirls(list1);
        
        User u2 = new User();
        u2.setName("【用户222】");
        u2.setAddress("【-甘肃省兰州市-】");
        GirlFriend girl21 = new GirlFriend("【赵雅芝】");
        GirlFriend girl22 = new GirlFriend("【张柏芝】");
        GirlFriend girl32 = new GirlFriend("【汤唯】");
        List<GirlFriend> list2 = new ArrayList<GirlFriend>();
        list2.add(girl21);
        list2.add(girl22);
        list2.add(girl32);
        u2.setGirls(list2);
        
        copyBean(u1, u2);
        System.out.println("拷贝后:"+u1);
    }


    /**
     * 将对象中需要改变的属性值 拷贝到目标对象中,替换目标对象中的部分属性值
     * 注意:2个传入的object必须类型相同
     * @param change 要改变的对象
     * @param target 目标对象
     */
    public static void copyBean(Object change, Object target) {
        Map<String, Object> toMap = beanToMap(change);
        Map<String, Object> fromMap = beanToMap(target);
        System.out.println("from:"+fromMap);
        System.out.println("to:"+toMap);
        
        for(String key : fromMap.keySet()){
            if(fromMap.get(key) == null){
                continue;
            }
            //将fromMap的值设置到toMap中
            toMap.put(key, fromMap.get(key));
        }
        //转换map为bean
        mapToBean(toMap, change);
    }
    
    
    /** 
     * 将对象装换为map 
     * @param bean 
     * @return 
     */  
    public static Map<String, Object> beanToMap(Object bean) {  
        Map<String, Object> map = new HashMap<String, Object>();  
        if (bean != null) {  
            BeanMap beanMap = BeanMap.create(bean);  
            for (Object key : beanMap.keySet()) {
                map.put(key+"", beanMap.get(key));  
            }
        }  
        return map;  
    }
    
    /** 
     * 将map装换为javabean对象 
     * @param map 
     * @param bean 
     * @return 
     */  
    public static void mapToBean(Map<String, Object> map,Object bean) {  
        BeanMap beanMap = BeanMap.create(bean);
        beanMap.putAll(map);
    } 
    
}

 

from:{id=0, girls=[GirlFriend [name=【赵雅芝】], GirlFriend [name=【张柏芝】], GirlFriend [name=【汤唯】]], pwd=null, address=【-甘肃省兰州市-】, name=【用户222】}

to:{id=1, girls=[GirlFriend [name=范冰冰], GirlFriend [name=林心如]], pwd=12333, address=杭州西湖区, name=用户1}

拷贝后:User [编号=1, 姓名=【用户222】, 密码=12333, 地址=【-甘肃省兰州市-】, 女朋友=[GirlFriend [name=【赵雅芝】], GirlFriend [name=【张柏芝】], GirlFriend [name=【汤唯】]]]

 

Bean熟悉替换,只替换部分属性,其他属性值不改变

标签:

原文地址:http://www.cnblogs.com/yzlpersonal/p/5778348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!