1.为什么要使用BeanUtils组件? 由于我们经常操作javabean,很频繁的get和set来实现属性的复制,apache提供了这个BeanUtils来实现直接对象的拷贝。
2.BeanUtils的基本实现 导包:
文章图片
下面两个包是必须要导入的,第一个是源码包。
实现对象的复制:
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类型。
文章图片
日期转换器工具类实现:
@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 =https://www.it610.com/article/= 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使用第三方工具BeanUtils实现对象的复制】