Bean熟悉替换,只替换部分属性,其他属性值不改变
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);
}
}
拷贝的方法:
/**
* 将对象中需要改变的属性值 拷贝到目标对象中,替换目标对象中的部分属性值
*
* @param fromBean 要改变的对象
* @param targetBean 目标对象
*/
public static void copyBean(Object fromBean, Object targetBean) {
Map<String, Object> fromMap = beanToMap(fromBean);
Map<String, Object> toMap = beanToMap(targetBean);
for (String key : fromMap.keySet()) {
if (fromMap.get(key) == null) {
continue;
}
//将fromMap的值设置到toMap中
toMap.put(key, fromMap.get(key));
}
//转换map为bean
mapToBean(toMap, targetBean);
} /**
* 将对象装换为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熟悉替换,只替换部分属性,其他属性值不改变的更多相关文章
- 帝国cms内容关键字自动加链接且设置内容关键字只替换一次
网站上线前先设置一些内部链接对后期的优化排名很有帮助,帝国cms也可以设置文章中的关键字自动加链接,但是要注意一下关键词替换次数,最好是1次. 怎么操作呢?分两步完成 1.帝国cms文章关键字自动加链 ...
- [改善Java代码]不要只替换一个类
建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...
- JS的replace默认只替换第一个匹配项
1. JS的replace默认只替换第一个匹配项. 解决方法: 使用正则表达式进行匹配替换[ ①.replace(new RegExp(②,"g") ,③); ] ①:包含 ...
- Javascript replace 为什么只替换一个字符?
Javascript replace 为什么只替换一个字符? 如下代码,为什么结果是 "a2b1c1" ? 'a1b1c1'.replace('1', 2); 因为 javascr ...
- sed 's/AA/BB/' file # 将文件中的AA替换成BB,只替换一行中第一次出现的AA,替换后的结果输出到屏幕 sed 's/AA/BB/g' file # 将文件中的所有AA都替换成BB,替换后的结果输出到屏幕
生信人的自我修养:Linux命令速查手册 简佐义 四川大学 生物信息学硕士 科学求真 赢 10 万奖金 · 院士面对面 209 人赞同了该文章 许多人做生物信息学,要么不重视Linux,要么不知道 ...
- Spring中bean标签的属性和值:
Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...
- 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)
1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的 配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...
- word中替换被批注的正文的值
word中替换被批注的正文的值 word批注winform替换值正文 try { Word.Document docum ...
- 【SQL】Update中使用表别名、如何用表中一列值替换另一列的所有值
Update中使用表别名 select中的表别名: select * from TableA as ta update中的表别名: update ta from TableA as ta 如何用表中一 ...
随机推荐
- PCB的封装尺寸
PCB封装主要分为贴片式与插件式 1)贴片元件封装说明发光二极管:颜色有红.黄.绿.蓝之分,亮度分普亮.高亮.超亮三个等级,常用的封装形式有三类:0805.1206.121 (常用封装为RB.1/. ...
- zjuoj 3780 Paint the Grid Again
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...
- mac 安装jdk1.5
前期准备 Java安装包 JDK 1.5:Java for Mac OS X 10.5 Update 10(From: Apple) 辅助工具 Pacifist:用于提取*.dmg安装包中的文件(点我 ...
- Java程序猿学习的建议(转)
第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...
- swift基础:第一部分:基本数据类型及结构
首先谈点开心的:今天是周二,广州的天气格外明朗,早上上班的心情也不一样,最值得高兴事,很快到五一劳动节了,说到劳动节,放假是吧.你懂的.再来谈谈我上周的工作总结,上周可以说是黑轮压城城欲摧,甲光向日金 ...
- java在cmd下编译和执行引用jar的类
java编译和执行引用第三方jarcmd 1.将上面的ojdbc14.jar文件,与调用程序复制到系统D盘的根目录下,切记:因为调用程序在wym.database包下,所以需要将类其所在的包一起拷贝 ...
- python 国内源
pipy国内镜像目前有: http://pypi.douban.com/ 豆瓣 http://pypi.hustunique.com/ 华中理工大学 http://pypi.sdutlinux.o ...
- 使用FastJSON,将对象或数组和JSON串互转
Fastjson,是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库.其开源的下载网址为:https://github.com/AlibabaTech/fastjson. 示例代码如下: ...
- xutils3
使用方法:https://github.com/wyouflf/xUtils3 http://blog.csdn.net/tyk9999tyk/article/details/53306035 .Ne ...
- 鸟哥的linux私房菜学习记录之软件安装原始码与Tarball