dozer是一种javabean的映射工具,类似Apach的beanUtils。它可以进行简单的属性映射、复杂的属性映射、双向映射、递归映射等,并且可以通过xml配置文件进行灵活的配置。
表现层与应用层之间是通过数据传输对象(DTO)进行传输。数据传输对象存在的目的是对领域对象进行数据封装,实现层与层的数据传输。领域对象更注重领域,而数据传输对象更注重数据。简单来说,model是根据业务定义的,DTO是根据UI定义的。通过DTO可以实现表现层与model的解耦。
dozer可以实现model bean和DTO bean的相互转化。
dozer的使用:
添加pom依赖
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
如果要映射两个属性名完全相同的对象,直接调用dozer的api(.map)即可,若是不同属性的两个对象,需要配置dozerBeanMappingFactory(整合spring的情况下),详情见
https://blog.csdn.net/u010832551/article/details/74518902
beanMapper:
package com.yct.cms.utils;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dozer.DozerBeanMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
* 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现:
*
* 1. 持有Mapper的单例.
* 2. 返回值类型转换.
* 3. 批量转换Collection中的所有对象.
* 4. 区分创建新的B对象与将对象A值复制到已存在的B对象两种函数.
*
*/
public class BeanMapper {
/**
* 持有Dozer单例, 避免重复创建DozerMapper消耗资源.
*/
private static DozerBeanMapper dozer = new DozerBeanMapper();
/**
* 基于Dozer转换对象的类型.
* 将map转换成对象
* @param source 资源数据
* @param destinationClass 目标对象类型
* @return
*/
public static <T> T map(Object source, Class<T> destinationClass) {
return dozer.map(source, destinationClass);
}
/**
* 将对象转换成Map
* @param obj
* @return
*/
public static Map<String, Object> beanToMap(Object obj) {
Map<String, Object> hashMap = new HashMap<String, Object>();
try {
Class<?> c = obj.getClass();
Method m[] = c.getDeclaredMethods();