記錄一個好用的對象拷貝工具 dozer

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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章