java使用第三方工具BeanUtils实现对象的复制

1.为什么要使用BeanUtils组件?

由于我们经常操作javabean,很频繁的get和set来实现属性的复制,apache提供了这个BeanUtils来实现直接对象的拷贝。

2.BeanUtils的基本实现

导包:

java使用第三方工具BeanUtils实现对象的复制_第1张图片

下面两个包是必须要导入的,第一个是源码包。

实现对象的复制:

public class User {
	private Integer id;
	private String username;
	private String gender;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
}

@Test
public void test1() throws Exception{
     User user=new User();
     BeanUtils.copyProperty(user, "id", "1");
     BeanUtils.copyProperty(user, "gender", "男");
     System.out.println("单个属性值传入的方式:"+user.getId()+", "+user.getGender());
     User newUser=new User();
     BeanUtils.copyProperties(newUser, user);
     System.out.println("整个对象拷贝:"+newUser.getId()+", "+newUser.getGender());
     Map map=new HashMap();
     map.put("username", "Jerry");
     BeanUtils.populate(newUser, map);
     System.out.println("拷贝map对象:"+newUser.getUsername());
}
结果:

单个属性值传入的方式:1, 男
整个对象拷贝:1, 男
拷贝map对象:Jerry

3.日期转换器工具

User类:

public class User {
	private Integer id;
	private String username;
	private String gender;
	private Date birth;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
}
增加了生日属性,是日期类型的。

如果我们直接使用BeanUtils.copyProperty(user,"birth",birthString);那么就会报以下警告,转换也不成功。BeanUtils不会把String类型自动转成Date类型。

java使用第三方工具BeanUtils实现对象的复制_第2张图片

日期转换器工具类实现:

@Test
public void test2() throws Exception{
	User newUser=new User();
	String birthString="1993-09-30";
	ConvertUtils.register(new Converter(){
		@Override
		public Object convert(Class type, Object value) {
			if( type != Date.class) return null;
			if(value == null || "".equals(value.toString().trim())) return null;
			try {
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
				return sdf.parse(value.toString());
			} catch (ParseException e) {
				throw new RuntimeException(e);
			}
		}
	},Date.class);
	BeanUtils.copyProperty(newUser, "birth", birthString);
	System.out.println(newUser.getBirth());
}
结果:

Thu Sep 30 00:00:00 CST 1993

通过ConvertUtils的register方法内自定义一个转换器来实现String类型的日期转为Date类型的日期。


简化版:

使用组件提供的日期转换工具类:

@Test
public void test3() throws Exception{
	User newUser=new User();
	String birthString="2016-10-17";
	ConvertUtils.register(new DateLocaleConverter(), Date.class);
	BeanUtils.copyProperty(newUser, "birth", birthString);
	System.out.println(newUser.getBirth());
}
结果:

Mon Oct 17 00:00:00 CST 2016



你可能感兴趣的:(_____1.1.5,java杂识)