BeanUtils组件

BeanUtils组件

简介

       程序中对javabean的操作很频繁,所有Apache提供了一套开源的api,方便对javabean的操作,即BeanUtils组件,作用是简化javabean的操作。可以从 http://www.apache.org/   下载组件,然后在项目中引入jar文件。
 

使用BeanUtils组件的步骤

    1.引入BeanUtils包commons-beanutils-1.8.3.jar 点击打开链接
    2.引入日志支持包commons-logging-1.1.3.jar 点击打开链接
如果缺少日志jar包,则报错:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
         at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:157)
         at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:117)
         at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:68)

基本用法

1.对象属性的拷贝

       User user2 = new User();
       BeanUtils.copyProperty(user2, "userName", "mary");//注意这里的userName是setXXXX()方法后面的xXXX,而不是属性名称
       BeanUtils.setProperty(user2, "pwd", "666666");

2.对象的拷贝

        User newUser = new User();
        BeanUtils.copyProperties(newUser, user2);

3.map数据拷贝到JavaBean中    

        Map<String, Object> userMap = new HashMap<String, Object>();
        userMap.put("userName", "hello");// 注意这里的key值必须是setXXXX()方法后面的xXXX,而不是属性名称
        userMap.put("pwd", "wwww");
        userMap.put("age", 56);
        User user3 = new User();
        BeanUtils.populate(user3, userMap); 
@Test
	public void test1() throws Exception {
		//1.基本操作
		User user = new User();
		user.setUserName("jack");
		user.setPwd("888888");
		user.setAge(24);
		
		User user2 = new User();
		//2.BeanUtils组件实现对象属性的拷贝
		BeanUtils.copyProperty(user2, "userName", "mary");//注意这里的userName是setXXXX()方法后面的xXXX,而不是属性名称
		BeanUtils.setProperty(user2, "pwd", "666666");
		BeanUtils.copyProperty(user2, "age", 25);
		BeanUtils.copyProperty(user2, "birthday", new Date());
		
		//总结1:对于基本数据类型,会自动进行数据类型转换
		
		//3.对象的拷贝
		User newUser = new User();
		BeanUtils.copyProperties(newUser, user2);
		
		//4.map数据,拷贝到对象中
		Map<String, Object> userMap = new HashMap<String, Object>();
		userMap.put("userName", "hello");// 注意这里的key值必须是setXXXX()方法后面的xXXX,而不是属性名称
		userMap.put("pwd", "wwww");
		userMap.put("age", 56);
		User user3 = new User();
		BeanUtils.populate(user3, userMap);
		
		//测试
		System.out.println(user3.getUserName());
		System.out.println(user3.getPwd());
		System.out.println(user3.getAge());
	}

日期类型的拷贝(类型转换器)
注意:表单数据提交过来的数据一般都是字符串,当需要拷贝到的对象是日期类型时,直接拷贝会出错,需要注册日期类型转换器。
1.自定义日期类型转换器(推荐)
2.使用提供的日期类型转换器工具类(对""等不能做出判断,会报错,如果传入的字符串有特殊情况,须用自定义日期类型转换器 )
/**
	 * 日起类型转换器
	 * @throws Exception
	 */
	@Test
	public void test2() throws Exception {
		//模拟表单数据
		String userName = "jack";
		String pwd = "2222";
		String age = "33";
		String birthday = "   2017-3-30 08:20:38  ";
		
		//对象
		User user = new User();
		
		//注册日期类型转换器
		//1.自定义日期类型转换器
		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(user, "userName", userName);
		BeanUtils.copyProperty(user, "pwd", pwd);
		BeanUtils.copyProperty(user, "age", age);
		BeanUtils.copyProperty(user, "birthday", birthday);
		
		System.out.println(user);
	}
	
	/**
	 * 使用提供的日期类型转换器工具类
	 * 缺点:对""等不能做出判断,会报错,如果传入的字符串有特殊情况,须用自定义日期类型转换器
	 * @throws Exception
	 */
	@Test
	public void test3() throws Exception {
		//模拟表单数据
				String userName = "jack";
				String pwd = "2222";
				String age = "33";
				String birthday = "2017-3-30";
				
				//对象
				User user = new User();
				
				//使用组件提供的转换器工具类
				ConvertUtils.register(new DateLocaleConverter(), Date.class);
				
				//把表单提交的数据,封装到对象中
				BeanUtils.copyProperty(user, "userName", userName);
				BeanUtils.copyProperty(user, "pwd", pwd);
				BeanUtils.copyProperty(user, "age", age);
				BeanUtils.copyProperty(user, "birthday", birthday);
				
				System.out.println(user);
	}


BeanUtils组件封装表单请求数据

抽出封装数据的工具类
package com.cn.Util;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
public class WebUtils {
	/**
	 * 处理请求数据的封装,方式1
	 * @param request
	 * @param clazz
	 * @return
	 */
	public static <T> T parameters2bean(HttpServletRequest request,Class<T> clazz){
		try {
			//创建对象
			T t = clazz.newInstance();
			
			//(注册日期类型转换器)
			
			//获取所有的表单元素的名称
			Enumeration<String> parameterNames = request.getParameterNames();
			//遍历
			while(parameterNames.hasMoreElements()){
				//获取表单元素的名称
				String name = parameterNames.nextElement();
				//获取表单元素名称对应的值
				String value = request.getParameter(name);
				//把指定属性名称对应的值进行拷贝
				BeanUtils.copyProperty(t, name, value);
			} 
			return t;
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 处理请求数据的封装,方式2
	 * @param request
	 * @param clazz
	 * @return
	 */
	@Deprecated
	public static <T> T parameters2bean_old(HttpServletRequest request,Class<T> clazz){
		try {
			//创建对象
			T t = clazz.newInstance();
			Map<String, String[]> map = request.getParameterMap();
			BeanUtils.populate(t, map);
			return t;
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

调用工具类封装数据
//封装数据
User user = WebUtils.parameters2bean(request, User.class);
User user = WebUtils.parameters2bean_old(request, User.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值