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 如何用表中一 ...
随机推荐
- Python —条件语句
条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null ...
- 002:IPC与system函数简介
1:IPC名字mq_XXX,sem_XXX,shm_XXX. 消息队列 信号量 共享内存区 <mqueue.h> <semaphore.h> <sys.mman.h> ...
- 做个体面有尊严的IT人【转自界面】
向老罗致敬,好人终有好报: 转自网站:界面-http://www.jiemian.com/article/231843.html [华盛顿] 史蒂夫·马奎斯隐居在华盛顿郊外的一栋小木屋里,没有电视.没 ...
- C#中调用user32.dll库的keybd_Event函数,操作键盘
keybd_event()的函数原型是: void keybd_event( byte bVk, //虚拟键码 byte bScan, //该键的硬件扫描码 dword ...
- Web攻防之XSS,CSRF,SQL注入
摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨 ...
- Windows Phone 七、XML序列化
DataContractSerializer对象 public class Person { public int Id { get; set; } public string Name { get; ...
- 初学Python之谈
Python 编辑器 在windows中安装完Python后自带一个IDLE(Python GUI),但是个人感觉不太方便.之前在用java编程时使用过jetbrains的Intellij IDE,感 ...
- .net常见的面试题
1,asp.net中的页生命周期 答:msdn官网已给出标准答案,这里简述一下:页要经历下表概述的8个阶段.除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页. 而这8个阶 ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- vs加js引用
今天又有一个同事问我“在VS中如何让一个JS文件智能提示另一个JS文件中的成员”,他说Google了一下,并没有找到答案,然后我把这个小技巧贴出来,希望能被Google到. 有时候会有这种情况:当我的 ...