Dozer Mapper

799 阅读1分钟

一、Dozer 简介

Dozer 是一个 Bean 的映射工具,可以递归地将一个对象复制到另一个对象,常用于项目中 vo、bo、do之间的转换。

Dozer 提供了多种映射方式,例如:隐式映射、注解映射、xml映射等等。一般情况下,只需要采用默认的隐式映射就能满足需求,通过注解映射或者xml映射反而会使得 Bean 的复制更加复杂。

隐式映射就是将两个 Bean 相同的属性名进行映射,而属性的访问修饰符不会影响 Bean 的映射。如果两个 Bean 的属性名相同,但是类型不同,则 Dozer 会按照默认的转换规则进行类型转换。

二、集成 Dozer

在 SpringBoot 的 Dozer 只需要在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-core</artifactId>
    <version>6.5.0</version>
</dependency>

三、隐式映射

隐式映射只需要调用 Dozer 提供的 api 就可以完成 Bean 的转换。

Dozer 暂不支持集合的映射,如果需要对集合进行映射,则需要集合中的对象进行逐一映射。

下面对 Dozer 进行简单的封装:

/**
 * Dozer Mapper 工具类
 */
public class LocalBeanUtil {
    private static final Mapper mapper = DozerBeanMapperBuilder.buildDefault();

    /**
     * 普通Bean复制
     * @param source
     * @param clazz
     * @param <T>
     * @param <D>
     * @return
     */
    public static <T, D> D beanCopy(T source, Class<D> clazz) {
        if (source == null) {
            return null;
        }
        return mapper.map(source, clazz);
    }

    /**
     * 集合对象复制
     * @param source
     * @param clazz
     * @param <T>
     * @param <D>
     * @return
     */
    public static <T, D> List<D> beanCopy(List<T> source, Class<D> clazz) {
        List<D> list = new ArrayList<D>();
        if (!CollectionUtils.isEmpty(source)) {
            for (T t : source) {
                D d = mapper.map(t, clazz);
                list.add(d);
            }
        }
        return list;
    }
}