spring cloud腳手架項目(九)各層模型Pojo轉換工具類BeanCopyUtil

前言

編程中比較常見的問題就是controller層的DTO轉爲對應的數據操作層的DO。或者是在一系列service操作之後返回到controller層的DTO轉換。或者是還需要把DTO轉VO。

模型介紹

1、用戶發出請求,表單的數據層被匹配爲 VO
2、展示層把 VO 轉換爲服務層對應方法鎖要求的 DTO,傳輸給服務層
3、服務層首先根據 DTO 的數據構造一個 DO,調用 DO 的業務方法完成具體業務
4、服務層把 DO 轉換爲持久層對應的 PO,調用持久層持久化方法,把 PO 傳遞給它完成持久化操作
一般來說都是常用DTO和BO也就夠了。特殊情況需要封裝VO,PO基本用不着

之前的寫法

以下是僞代碼

public voud conver(ADO b){
	ADTO a = new DTO();
	a.setName(b.getName());
	a.setNum(b.getName());
	return a;
}

一般情況下DO轉對應的DTO的時候,很多的類的名稱都是一模一樣的,這個時候就會要反覆寫這種conver。那麼就可以用到BeanUtils.copyProperties()這個方法了。但是有時候還需要list的轉換,以及更加通用的處理

BeanCopyUtil

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

public class BeanCopyUtil {
    public static <T, S> List<T> convertList(Collection<S> srcList, Class<T> targetClazz) {
        if (CollectionUtils.isEmpty(srcList)) {
            return Collections.emptyList();
        }
        T target = null;
        try {
            List<T> dist = new ArrayList<T>();
            for (S src : srcList) {
                //目標類注意必須實現空構造函數
                target = targetClazz.newInstance();
                BeanUtils.copyProperties(src, target);
                dist.add(target);
            }
            return dist;
        } catch (Exception e) {
            throw new IllegalArgumentException("對象" + targetClazz.getSimpleName() + "複製屬性出錯", e);
        }
    }
    /**
     *
     * @param src
     * @param targetClazz
     * @return
     */
    public static <T, S> T convert(S src, Class<T> targetClazz) {
        if (src == null ) {
            return null;
        }
        try {
            //目標類注意必須實現空構造函數
            T target = targetClazz.newInstance();
            BeanUtils.copyProperties( src,target);
            return target;
        } catch (Exception e) {
            throw new IllegalArgumentException("對象" + targetClazz.getSimpleName() + "複製屬性出錯", e);
        }
    }
}

最後

這樣我們的通用轉換模型pojo工具類就完成了。通過該工具類可以方便的做各層之間模型的切換了。
項目github地址:https://github.com/alex9567/SpringCloudScaffold

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