分享

学习笔记之 BeanUtils组件

 臭小子的共享 2015-10-11

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());


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多