一、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;
}
}