beanUtils简介
commons-beanutils 是apache commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理。beanUtils包下载链接:[http://download.csdn.net/detail/macanv/9542584 "下载"](http://download.csdn.net/detail/macanv/9542584 "下载")
beanUtils 给对象赋值
首先,我们有一个自定义的数据类型,例如我写的Emp数据结构:
package com.macan.beanUnit;
import java.util.Date;
/**
*
* @author macan
* 自定义Emp数据类型。
*/
public class Emp {
private int id;
private String name;
private float salary;
//private Date birthday;
//get && set methods
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
//重写toString 方法
@Override
public String toString() {
// TODO Auto-generated method stub
return "id = " + id + ", name = " + name + ", salary = " + salary + ", birthday " + birthday.toString();
}
}
一般我们从网络或者其他地方获取数据的时候,数据类型可能都是String类型的,因为这样表示起来很方便,但是在进行给对象赋值的时候就可能遇到类型转换等问题,一般别人用的不爽的时候,就会出现万能的神说这里需要一个框架,于是beanUtils出现了,下面演示如何使用beanUtils给对象各个属性赋值的案例:
package com.macan.beanUnit;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.junit.Test;
public class BeanUtilss {
@Test
public void testBeanUtils() throws Exception {
String id = "110";
String name = "macan";
String salary = "11.2";
Emp emp = new Emp();
BeanUtils.setProperty(emp, "id", id);
BeanUtils.setProperty(emp, "name", name);
BeanUtils.setProperty(emp, "salary", salary);
System.out.println(emp);
}
}
上面的代码使用JUnit测试框架,不懂得可以自行Google,测试运行输出如下:
可以看到beanUtils可以让我们不用关心数据类型而转换。但是,beanUtils并不是万能的,它支持的数据类型有限,具体看下面。
benaUtils从对象中取值
既然能赋值,自然能够取值,取值的示例代码如下:
String name2 = BeanUtils.getProperty(emp, "name");
System.out.println(name2);
beanUtils给不支持的数据类型赋值
上面提到了beanUtils不支持所有的数据类型的赋值与解析,下面列出了Java中beanUtils能够解析的数据类型:
java.lang.BigDecimal
java.lang.BigInteger
boolean and java.lang.Boolean
byte and java.lang.Byte
char and java.lang.Character
java.lang.Class
double and java.lang.Double
float and java.lang.Float
int and java.lang.Integer
long and java.lang.Long
short and java.lang.Short
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp
但是对于不支持的数据类型呢?beanUtils提供了ConvertUtils类,其中的register()方法来自定义数据类型的解析,方法原型:
public static void register(Converter converter, Class clazz) {
ConvertUtilsBean.getInstance().register(converter, clazz);
}
这里就简单地给出一个util.date数据类型的解析,这里任然使用上面使用过的Emp类来做测试类,添加String birthday 属性。测试代码如下:
package com.macan.beanUnit;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.junit.Test;
public class BeanUtilss {
@Test
public void testBeanUtils() throws Exception {
String id = "110";
String name = "macan";
String salary = "11.2";
String birthday = "1992-10-15"; //新加
Emp emp = new Emp();
//使用内部内实现converter 接口,可以实现非简单数据类型的转换
ConvertUtils.register(new Converter() {
@Override
/**
* @type : 传入的数据类型
* @values: 传入的值
*/
public Object convert(Class type, Object value) {
// TODO Auto-generated method stub
Date date = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
date = (Date) dateFormat.parse((String)value);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date;
}
}, Date.class);
BeanUtils.setProperty(emp, "id", id);
BeanUtils.setProperty(emp, "name", name);
BeanUtils.setProperty(emp, "salary", salary);
BeanUtils.setProperty(emp, "birthday", birthday);
System.out.println(emp);
}
}
自此,beanUtils的简单使用已经介绍完了,如果你有什么问题或者有什么建议,请给我留言,一起学习。