1. BeanUtils组件
1.1 为什么要用这个组件?
程序中,对javabean的操作非常频繁!需要简化对javabean的操作,这是可以使用beanUtils组件!
1.2 BeanUtils
Apache组织(开源),开发的一套简单、便捷的组件,方便对javabean的操作!
使用步骤:
1. 下载组件,包括jar包、源码
2. 项目中引用jar包
commons-beanutils-1.8.3.jar
commons-logging-1.1.3.jar
/**
* BeanUtils组件
* 1. 引入jar文件
* 2. BeanUtils组件实现属性的拷贝,8中基本数据类型+String类型可以实现自动转换
* 日期类型,需要注册日期类型转换器!
* 3.用法
* 1.往指定的javabean属性中设置值
* BeanUtils.copyProperty(order, "id", id);
* 注册日期类型转换器:
* ConvertUtils.register(newDateLocaleConverter(), Date.class);
*
* 2.对象间拷贝
* BeanUtils.copyProperties(new_order, order);
*
* 3.把map集合,拷贝到指定对象中 (map中的key,要与javabean中的属性名称一样)
* BeanUtils.populate(order, map);
* @author Administrator
*
*/
@Test
public void test1() throws Exception {
int id = 100;
String address = "广州天河";
String hobby[] = {"送餐","收钱"};
String date = "";//"1990-09-09";
// 创建对象
OrderMeal order = new OrderMeal();
// 注册日期类型转换器:方式1: 从string,到date类型的转换
ConvertUtils.register(new DateLocaleConverter(), Date.class);
/*
// 注册日期类型转换器:方式2: 自己实现一个日期转换功能
ConvertUtils.register(new Converter() {
// 把传入的字符串(value),转换为日期
public Object convert(Class type, Object value) {
// 先判断
if (value == null){
return null;
}
if ("".equals(value.toString().trim())){
return null;
}
if (!(value instanceof String)){
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(value.toString());
} catch (ParseException e) {
throw new RuntimeException();
}
}
}, Date.class);
*/
// 用BeanUtils组件,往javabean属性中设置值
/** 向order对象中的address属性设置值**/
BeanUtils.copyProperty(order, "address", address);
BeanUtils.copyProperty(order, "id", id);
BeanUtils.copyProperty(order, "hobby", hobby);
BeanUtils.copyProperty(order, "order_date",date);
/** 把源对象order拷贝到目标对象new_order中**/
OrderMeal new_order = new OrderMeal();
BeanUtils.copyProperties(new_order, order);
/** 把map中数据,拷贝到javabean中**/
Map<String,Object> map = new HashMap<String,Object>();
map.put("id", id);
map.put("address", address);
// 创建javabean对象
OrderMeal order3 = new OrderMeal();
// 把map中数据,拷贝到javabean中
BeanUtils.populate(order3, map);
}
1.3 请求数据填充javabean
没有使用泛型:
// 实现把请求数据拷贝到javabean中 /** * map:集合中数据 * dest:要拷贝的目标对象 */ public void copyToBean(Object dest, Map map) { ConvertUtils.register(new DateLocaleConverter(), Date.class); try { BeanUtils.populate(dest, map); } catch (Exception e) { throw new RuntimeException(e); } }
调用方法
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 要填充的对象 OrderMeal order = new OrderMeal(); // 把请求数据拷贝到order对象中 this.copyToBean(order, request.getParameterMap());
System.out.println(); } |
没有使用范围,需要单独new对象
OrderMeal order = new OrderMeal();
可以使用泛型再简化!
// 泛型优化 public <T> T copyToBean(Class<T> clazz, Map map) { ConvertUtils.register(new DateLocaleConverter(), Date.class); try { // 创建对象 T obj = clazz.newInstance(); // 拷贝 BeanUtils.populate(obj, map); // 返回 return obj; } catch (Exception e) { throw new RuntimeException(e); } } |
调用,更加简单:
OrderMealorder = this.copyToBean(OrderMeal.class, request.getParameterMap());