package com.***.utils;
import org.dozer.DozerBeanMapperBuilder;
import org.dozer.Mapper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* 對象拷貝
*
* @author ***
* @date 2018年7月13日 下午5:17:23
*/
public class DozerUtils {
private static volatile Mapper mapper;
private static Object lock = new Object();
static {
if (mapper == null) {
synchronized (lock) {
if (mapper == null) {
mapper = DozerBeanMapperBuilder.create().build();
}
}
}
}
public static void copy(Object source, Object target) {
mapper.map(source, target);
}
public static <T> T copy(Object source, Class<T> clazz){
if(Objects.isNull(source)){
return null;
}
return mapper.map(source, clazz);
}
public static <T> List<T> copyList(List<?> sourceList, Class<T> clazz){
if(Objects.isNull(sourceList) || sourceList.size() == 0){
return Collections.emptyList();
}
List<T> dest = new ArrayList<>();
for (Object source : sourceList){
dest.add(copy(source, clazz));
}
return dest;
}
public static <S, T> List<T> copyList(List<S> sourceList, Class<T> destinationClass, DozerCopyHandler<S,T> handler){
if(Objects.isNull(sourceList) || sourceList.size() == 0){
return Collections.emptyList();
}
List<T> destinationList = new ArrayList<>();
for (S sourceObject : sourceList) {
T destinationObject = handler.map(sourceObject, destinationClass);
destinationList.add(destinationObject);
}
return destinationList;
}
public static <T> PageResult<T> copyPage(PageResult<?> sourcePage, Class<T> clzz){
PageResult<T> destPageResult = copyPageResult(sourcePage);
if(Objects.isNull(destPageResult)){
return new PageResult<>();
}
List<T> destList = copyList(sourcePage.getList(), clzz);
destPageResult.setList(destList);
return destPageResult;
}
public static <S, T> PageResult<T> copyPage(PageResult<S> sourcePage, Class<T> destClass, DozerCopyHandler<S, T> handler){
PageResult<T> destPageResult = copyPageResult(sourcePage);
if(Objects.isNull(destPageResult)){
return new PageResult<>();
}
List<T> destList = copyList(sourcePage.getList(), destClass, handler);
destPageResult.setList(destList);
return destPageResult;
}
private static <S, T> PageResult<T> copyPageResult(PageResult<S> sourcePage){
if(Objects.isNull(sourcePage)){
return null;
}
PageResult<T> destResult = new PageResult<>();
destResult.setTotal(sourcePage.getTotal());
destResult.setPages(sourcePage.getPages());
destResult.setPageNum(sourcePage.getPageNum());
destResult.setPageSize(sourcePage.getPageSize());
return destResult;
}
}
需要導入依賴包
<!--Dozer對象拷貝 -->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-core</artifactId>
<version>6.2.0</version>
</dependency>