BeanUtil

这边分享一个BeanUtil,一般我们现实在前端的对象称之为VO,而VO和你从数据库取出来的Bean对象是有区别的,因此我们经常会从对象中选择其中某几个字段充当VO,那么你就可以使用我这个工具类,直接可以将List的实体对象转换成List的Vo,减少了很多麻烦。其中一个注意点就是需要引入commons包

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtils;


/**
 * 转换vo的公共方法
 * @author 
 */
public class BeanUtil {


	public static Method makeGetMethod(Class classType, String fieldName)
			throws Exception {

		String firstLetter = fieldName.substring(0, 1).toUpperCase();
		String getMethodName = "get" + firstLetter + fieldName.substring(1);
		Method getMethod = classType.getMethod(getMethodName, new Class[] {});
		return getMethod;
	}

	public static Method makeSetMethod(Class classType, String fieldName)
			throws Exception {

		Field field = classType.getDeclaredField(fieldName);
		String firstLetter = fieldName.substring(0, 1).toUpperCase();
		String setMethodName = "set" + firstLetter + fieldName.substring(1);
		Method setMethod = classType.getMethod(setMethodName,
				new Class[] { field.getType() });
		return setMethod;
	}

	/**
	 * 当需要对返回的vo进行处理时调用
	 * List<MessageVO> voList = (List<MessageVO>) BeanUtil.poToVo(MessageVO.class, result,null);
	 * @param classType vo类名
	 * @param po        entity类
	 * @param fieldMap  po到vo名称不相同的字段映射
	 * @return vo实例
	 */
	public static Object poToVo(Class<?> classType, Object po,
			Map<String, String> fieldMap) {

		Object entity = null;
		try {
			entity = classType.getConstructor(new Class[] {}).newInstance(
					new Object[] {});
			Field fields[] = classType.getDeclaredFields();
			String className = classType.getSimpleName();
			for (int i = 0, length = fields.length; i < length; i++) {
				try {
					String fieldName = fields[i].getName();
					Class fieldType = fields[i].getType();
					Method setMethod = makeSetMethod(classType, fieldName);
					Method getMethod = null;
					if (setMethod == null) {
						continue;
					}
					if (fieldMap == null || !fieldMap.containsKey(fieldName)) {
						getMethod = makeGetMethod(po.getClass(), fieldName);
					} else {
						// 如果在map中,则说明po和vo字段名称不一致
						getMethod = makeGetMethod(po.getClass(),
								fieldMap.get(fieldName));
					}
					Object value = getMethod.invoke(po, new Object[] {});
					setMethod.invoke(entity, value);
				} catch (Exception e) {
					continue;
				}
			}
		} catch (Exception e) {
			return null;
		}
		return entity;
	}

	public static List poToVo(Class<?> classType, List poList,
			Map<String, String> fieldMap) {
		List list = new ArrayList();
		Object vo = null;
		try {
			for (int i = 0; i < poList.size(); i++) {
				vo = poToVo(classType, poList.get(i), fieldMap);
				list.add(vo);
			}
		} catch (Exception e) {
			return null;
		}
		return list;
	}

	/**
	 * 复制po的对象属性到vo
	 * 
	 * @param vo
	 *            .classType
	 * @param po
	 * @return vo
	 */
	public static Object poToVo(Class<?> classType, Object po) {
		Object entity = null;
		try {
			entity = classType.getConstructor(new Class[] {}).newInstance(
					new Object[] {});
			PropertyUtils.copyProperties(entity,po);
		} catch (Exception e) {
			return null;
		}
		return entity;
	}

	/**
	 * 直接在控制层返回voList时调用
	 * 比如:jsonResult.success(poToVo(classType, poList));
	 * @param vo
	 *            .classType
	 * @param poList
	 * @return voList
	 */
	public static List poToVo(Class<?> classType, List poList) {
		List list = new ArrayList();
		Object entity = null;
		try {
			for (int i = 0; i < poList.size(); i++) {
				entity = classType.getConstructor(new Class[] {}).newInstance(
						new Object[] {});
				PropertyUtils.copyProperties(entity,poList.get(i));
				list.add(entity);
			}

		} catch (Exception e) {
			return null;
		}
		return list;
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值