Java Web当中BeanUtils的封装MyBeanUtils,populate方法使用 MyBeanUtils.populate

Java web工程中BeanUtils的封装MyBeanUtils,populate方法使用

接收form表单数据

MyBeanUtils.populate(user, request.getParameterMap());
BeanUtils.populate(obj, map);

浅谈 BeanUtils 的封装 , BeanUtils 类中方法 populate (Object bean, Map properties ); 用于把 form 提交的表单中数据封装在 bean中;

request 中相比于 getParameter ( 标签 id ) 单个获取 属性值将 ,提高效率简化代码;

抽取为MyBeanUtils 以后,更为便捷 ,jar 下载地址 repository 仓库搜索下载: 使用 maven 可直接配置 依赖;
在这里插入图片描述

package cn.itzheng.store.utils;

import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

public class MyBeanUtils {

	public static void populate(Object obj, Map<String, String[]> map) {
		try {
			// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
			// 1_创建时间类型的转换器
			DateConverter dt = new DateConverter();
			// 2_设置转换的格式
			dt.setPattern("yyyy-MM-dd");
			// 3_注册转换器
			ConvertUtils.register(dt, java.util.Date.class);
			BeanUtils.populate(obj, map);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	public static<T> T  populate(Class<T> clazz, Map<String, String[]> map) {
		try {
			
			T obj=clazz.newInstance();
			// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
			// 1_创建时间类型的转换器
			DateConverter dt = new DateConverter();
			// 2_设置转换的格式
			dt.setPattern("yyyy-MM-dd");
			// 3_注册转换器
			ConvertUtils.register(dt, java.util.Date.class);
			BeanUtils.populate(obj, map);
			return obj;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}		
	}
	
}

实例中使用场景,主要在注册 时候 form 表单提交的数据 进行封装 ;

实体bean ,User 类的成员属性 很多的时候 ,从request 请求中一个个获取 表单数据 效率低下 ,例如以下User 的成员属性如下:
在这里插入图片描述
在这里插入图片描述
如果按下面的这种方法做太过于复杂,如果数据量大,代码臃肿

//1.获取用户数据   封装到User对象中
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        String sex = request.getParameter("sex");
        String address = request.getParameter("address");
        String email = request.getParameter("email");
        String qq = request.getParameter("qq");
        String age = request.getParameter("age").equals("")?"18":request.getParameter("age");
 
        //2.封装数据
        User user = new User();
        user.setId(Integer.valueOf(id));
        user.setName(name);
        user.setSex(sex);
        user.setAddress(address);
        user.setEmail(email);
        user.setQq(qq);
        user.setAge(Integer.valueOf(age));

使用MyBeanUtils.populate方法对其进行封装,将对应要分装的类传入,

User user = MyBeanUtils.populate(User.class, request.getParameterMap());

MyBeanUtils.populate—》BeanUtils.populate(obj, map);

这个方法的内部执行机制是。遍历map集合中的key,判断bean对象中是否有以这个和key相同的属性,如果有就将这个key对应的value值,付给bean对应的属性

发布了46 篇原创文章 · 获赞 70 · 访问量 3725

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/104923385