dozer是什么?
在開發過程中,常常會涉及到對象之間的轉換,bean到dto到vo等等,dozer便是很好的一個對象轉換的組件。它可以將一個對象遞歸拷貝到另外一個對象。既支持簡單的對象映射,也支持復雜的對象映射。
對象映射
dozer支持兩種映射方式,調用api的簡單映射方式和使用xml的映射方式。api調用的方式約束我們定義的兩個bean中的成員變量名要一樣,方便自動映射,至於類型可以不一樣,比如類A的成員變量 Integer num 和類B的 String num 是可以直接映射的。xml的方式是通過編寫xml文件來定義映射規則。
dozer使用
使用dozer時,只需要加上dozer的依賴即可,下面以maven為例(版本號可以根據最新的做修改):
<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.2.0</version> </dependency>
如下是以簡單映射方式封裝的uitl:
package com.dragonsoft.slxf.config; import org.dozer.DozerBeanMapperBuilder; import org.dozer.Mapper; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; /** * dozer 轉換器 * @author liyz */ @Component public class GeneralConvertor { //持有Dozer單例, 避免重復創建DozerMapper消耗資源. public static final Mapper mapper = DozerBeanMapperBuilder.buildDefault(); /** * List 實體類 轉換器 * * @param source 原數據 * @param clz 轉換類型 * @param <T> * @param <S> * @return */ public <T, S> List<T> convertor(List<S> source, Class<T> clz) { if (source == null) return null; List<T> map = new ArrayList<>(); for (S s : source) { map.add(mapper.map(s, clz)); } return map; } /** * Set 實體類 深度轉換器 * * @param source 原數據 * @param clz 目標對象 * @param <T> * @param <S> * @return */ public <T, S> Set<T> convertor(Set<S> source, Class<T> clz) { if (source == null) return null; Set<T> set = new TreeSet<>(); for (S s : source) { set.add(mapper.map(s, clz)); } return set; } /** * 實體類 深度轉換器 * * @param source * @param clz * @param <T> * @param <S> * @return */ public <T, S> T convertor(S source, Class<T> clz) { if (source == null) return null; return mapper.map(source, clz); } public void convertor(Object source, Object object) { mapper.map(source, object); } public <T> void copyConvertor(T source, Object object) { mapper.map(source, object); } }