Bean复制
有的时候我们需要将一个bean的属性赋值到另一个bean的属性中,比如用户提交过来的表单bean需要将该bean中的属性值赋值到对应的数据库bean,我们通常会以这样的方式做:
User user = new User("1", "Jon_China", "123456", "1992-11-17", "127.0.0.1");
2 TargetUser target = new TargetUser();
target.setId(user.getId());
target.setUserName(user.getUserName());
target.setPassword(user.getPassword());
当bean的属性过多时是不是感觉“嘿打脑壳”。不要紧,Apache提供bean的copy工具BeanUtil.
当然是用也是比较简单的,楼主一步一步说明:
1、先搞两个bean
package com.jon.china.beancopy;
//假设是用户提交过来的bean
public class User {
private String Id;
private String userName;
private String password;
private String birthday;
private String loginIp;
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public User(String id, String userName, String password, String birthday,
String loginIp) {
Id = id;
this.userName = userName;
this.password = password;
this.birthday = birthday;
this.loginIp = loginIp;
} }
定义目标bean,目的将User属性值复制到TargetUser中,需要注意的是属性birthday类型的变化。
package com.jon.china.beancopy;
import java.util.Date;
public class TargetUser {
private String Id;
private String userName;
private String password;
private Date birthday;
private String loginIp;
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
}
2、由于birthday需要将String转换为Date类型,这里定义个转换器,实现Converter接口:
package com.jon.china.beancopy; import java.text.ParseException;
import java.text.SimpleDateFormat; import org.apache.commons.beanutils.Converter; public class BeanConvert implements Converter {
/**
* 日期类型转换器
*/
@Override
public Object convert(Class type, Object value) {
if(value==null){
return null;
}
String v = (String) value;
if("".equals(v.trim())){
return null;
}
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd");
try {
return sf.parse(v);
} catch (ParseException e) {
throw new RuntimeException(e);
}
} }
3、初始化User,注册转换器,开始转换:
package com.jon.china.beancopy; import java.util.Date; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils; public class Test { public static void main(String[] args) {
User user = new User("1", "Jon_China", "123456", "1992-11-17", "127.0.0.1");
TargetUser target = new TargetUser();
//注册日期转换器
ConvertUtils.register(new BeanConvert(), Date.class);
try {
BeanUtils.copyProperties(target, user);//开始复制bean
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println(target.getLoginIp());
} }
4、成功,结束。
源码地址:https://github.com/LJunChina/BeanCopy
Bean复制的更多相关文章
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
转自:http://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html 比较的是四种复制的方式,分别为Apache的BeanUtils和Prope ...
- 【commons】Bean工具类——commons-beanutils之BeanUtils
一.起步 引入依赖: <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> < ...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
目前这里能调用是因为,在service的实现类里面,new了一个dao的对象 正常情况下 这里不应该是new一个对象,应该等于null或为空 设置为空侯再运行就会报错 出错的原因是这里为null 需要 ...
- Struts框架2ActionError类 内部资料 请勿转载 谢谢合作
ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...
- 3.8 spring - AbstractBeanDefinition 介绍
之前,我们已尽完成了xml 文档到 GenericBeanDefinition的转换, 也就是说,到这里,所有的配置都可以在GenericBeanDefinition 的实例中找到对应的配置. Gen ...
- JAVA CAS单点登录(SSO) 教程
一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...
- CAS单点登录(SSO)完整教程
转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...
- cas sso入门(转)
转:http://blog.csdn.net/frinder/article/details/7969925 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登 ...
- JAVA CAS单点登录(SSO)
一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...
随机推荐
- Java经典案例之-“最大公约数和最小公倍数”
/** * 描述:输入两个正整数m和n,求其最大公约数和最小公倍数.(最大公约数:最大公约数, * 也称最大公因数.最大公因子,指两个或多个整数共有约数中最大的一个.) * (最小公倍数:几个数共有的 ...
- shell读取文件的每一行
写法一: ---------------------------------------------------------------------------- #!/bin/bash while ...
- pureMVC简单示例及其原理讲解二(Model层)
本节将讲述Model层. Model层有VO和Mediator组成,非常简单,仅仅包含两个类:UserVO和UserProxy. UserVO中的构造器用于初始化用户的添加(通过email和密码),另 ...
- H.264 SVC 与H.264 AVC
分级视频编码技术实现一次性编码产生具有不同帧率.分辨率的视频压缩码流,然后根据不同网络带宽.不同的显示屏幕和终端解码能力选择需要传输的视频信息量,以此实现视频质量的自适应调整 AVC 实际上是 H.2 ...
- iOS tabbar点击动画效果实现
正常情况下,我们点击tabbar都只有一个变色效果,但有时候,如果我们想给它添加一个点击动画,该如何做呢? 先上几个效果图: 1.先放大,再缩小 2.Z轴旋转 3.Y轴位移 ...
- SSM框架注解整合
一.web应用环境 1.ServletContext 对于一个web应用,其部署在web容器(比如:tomcat)中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext, ...
- oracle数据库在mybatis中使用uuid
<insert id="insert" parameterType="com.xxx.SystemDepartment"> <sele ...
- this的相关介绍与用法
当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this.因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并 ...
- Sublime Text 3 修改配色主题【侧边框之...】
Sublime Text3 是挺喜欢的一款编辑器,一周五天朝九晚六面对,而默认的侧边栏颜色总显得不尽人意.右侧的代码高亮[color_scheme:Monokai]挺喜欢的,心里就想着如何把侧边栏也给 ...
- cli/php.ini和fpm/php.ini的区别
1. 当从命令行执行PHP binary时,cli/php.ini会被使用,你可以通过在命令行运行php --ini来查看. 2. 当PHP运行做为FPM时,会使用fpm/phh.ini,其中一种情况 ...