`
uule
  • 浏览: 6359240 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

DozerBeanMapper + 对象转Map方法

 
阅读更多

1、简介 
    dozer是一种JavaBean的映射工具,类似于apache的BeanUtils。但是dozer更强大,它可以灵活的处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。 

2、准备 
   现在开始就小试一下。 
   首先,需要下载jar包, 
   dozer.jar :http://dozer.sourceforge.net/downloading.html 
   还需要slf4j.jar,commons-lang.jar,commons-beanutil.jar, commons-loggin.jar 

 

http://lishaorui.iteye.com/blog/1151513

 

import com.google.common.collect.Lists;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.dozer.DozerBeanMapper;

public class BeanMapper
{
  private static DozerBeanMapper dozer = new DozerBeanMapper();

  /**
  * 构造新的destinationClass实例对象,通过source对象中的字段内容
  * 映射到destinationClass实例对象中,并返回新的destinationClass实例对象。
  * 
  * @param source 源数据对象
  * @param destinationClass 要构造新的实例对象Class
  */
  public static <T> T map(Object source, Class<T> destinationClass)
  {
    return dozer.map(source, destinationClass);
  }
  
  

  public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass)
  {
    List destinationList = Lists.newArrayList();
    for (Iterator i$ = sourceList.iterator(); i$.hasNext(); ) { Object sourceObject = i$.next();
      Object destinationObject = dozer.map(sourceObject, destinationClass);
      destinationList.add(destinationObject);
    }
    return destinationList;
  }

  
  /**
  * 将对象source的所有属性值拷贝到对象destination中.
  * 
  * @param source 对象source
  * @param destination 对象destination
  */
  public static void copy(Object source, Object destinationObject)
  {
    dozer.map(source, destinationObject);
  }
}

 

 

使用:

SmIaasQuotaV result = null;
		try {
			result = limitService.getLimitDetails(id,parentId);
			if(result != null){
				response.setData(BeanMapper.map(result, Map.class));
				response.setSuccess(true);
			}
		}

BeanMapper.map(result, Map.class)

转换为Map对象。

 

 

 

	public static <T> Map<String, T> toMap(Object target) {
		return toMap(target,false);
	}
	
	/**
	 * 将目标对象的所有属性转换成Map对象
	 * 
	 * @param target 目标对象
	 * @param ignoreParent 是否忽略父类的属性
	 * 
	 * @return Map
	 */
	public static <T> Map<String, T> toMap(Object target,boolean ignoreParent) {
		return toMap(target,ignoreParent,false);
	}
	
	/**
	 * 将目标对象的所有属性转换成Map对象
	 * 
	 * @param target 目标对象
	 * @param ignoreParent 是否忽略父类的属性
	 * @param ignoreEmptyValue 是否不把空值添加到Map中
	 * 
	 * @return Map
	 */
	public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue) {
		return toMap(target,ignoreParent,ignoreEmptyValue,new String[0]);
	}
	
	/**
	 * 将目标对象的所有属性转换成Map对象
	 * 
	 * @param target 目标对象
  	 * @param ignoreParent 是否忽略父类的属性
  	 * @param ignoreEmptyValue 是否不把空值添加到Map中
  	 * @param ignoreProperties 不需要添加到Map的属性名
	 */
  	public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue,String... ignoreProperties) {
  		Map<String, T> map = new HashMap<String, T>();
  		
		List<Field> fields = ReflectionUtils.getAccessibleFields(target.getClass(), ignoreParent);
		
		for (Iterator<Field> it = fields.iterator(); it.hasNext();) {
			Field field = it.next();
			T value = null;
			
			try {
				value = (T) field.get(target);
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			if (ignoreEmptyValue
					&& ((value == null || value.toString().equals(""))
					|| (value instanceof Collection && ((Collection<?>) value).isEmpty())
					|| (value instanceof Map && ((Map<?,?>)value).isEmpty()))) {
				continue;
			}
			
			boolean flag = true;
			String key = field.getName();
			
			for (String ignoreProperty:ignoreProperties) {
				if (key.equals(ignoreProperty)) {
					flag = false;
					break;
				}
			}
			
			if (flag) {
				map.put(key, value);
			}
		}
		
  		return map;
  	}

 

 

 

 

 

分享到:
评论

相关推荐

    java项目实体类转换实例

    在上面的代码中,我们使用DozerBeanMapper类来将sourceObject对象转换为DestinationObject对象。 此外,我们还需要在配置文件中定义类型转换规则。在Smarttask-manager项目中,我们可以在applicationContext-...

    dozer小例子-bean复制

    3. 执行映射:在业务代码中,我们可以调用DozerUtil的`map`方法,传入源对象和目标类的Class类型,Dozer会自动完成复制。 ```java MySource src = ...; // 初始化源对象 MyDestination dest = DozerUtil.map(src, ...

    Dozer 使用总结,也许对你有帮助

    Dozer 是一个强大的 Java 对象映射框架,它简化了对象到对象之间的转换工作,尤其在处理复杂的数据结构时。这个工具广泛应用于企业级应用,因为它可以极大地减少手动编写转换代码的工作量。在这个总结中,我们将深入...

    Dozer详解

    然后,你可以使用`map()`方法将一个对象转换为另一个对象。例如: ```java Mapper mapper = new DozerBeanMapper(); MySource source = new MySource(); MyDestination dest = mapper.map(source, MyDestination....

    dozer5.2 jar包

    1. `commons-beanutils-1.7.0.jar`:这是Apache Commons BeanUtils库,它提供了一组工具方法,用于处理JavaBean属性,使得开发者可以更方便地操作对象的属性。 2. `commons-collections.jar`:Apache Commons ...

    Dozer一个JavaBean至JavaBean映射器

    DozerBeanMapper mapper = new DozerBeanMapper(); Source source = new Source(); source.setName("John Doe"); Target target = mapper.map(source, Target.class); System.out.println(target.getName()); // ...

    Dozer 使用

    在这个例子中,`SourceObject` 和 `TargetObject` 分别是源对象和目标对象,`mapper.map()` 方法用于执行映射。 **三、映射配置** Dozer 允许通过 XML 配置文件进行更精细的控制。例如,你可以指定特定字段的映射...

    dozer(PDF)

    然后创建一个`DozerBeanMapper`实例,并使用该实例进行对象间的映射操作。 **2.4 使用说明** ##### 2.4.1 映射概念 - **简单属性映射**:直接将源对象的一个属性映射到目标对象的同名属性上。 - **复杂类型映射**...

Global site tag (gtag.js) - Google Analytics