コレクションとオブジェクトの重複

開発プロセス中、userVO から userPO への変換など、BO、PO、DTO、VO などの変換が常に発生します。次のように独自の変換メソッドを記述します

private UserPO converterUser(UserVO user) {
    
    
   UserPO userPO = new UserPO();
   userPO.setId(user.getId());
   // add more feild...
   return userPO;
}

これは最も独創的で最も労力がかかるもので、特定のフィールドを誤って間違って書き込んだ場合にバグが発生します。ただし、一部のjarパッケージにはそのまま利用できる既成のメソッドが用意されており、例えばBeanUtils.copyProperties(source,target);spring-beansパッケージのソースコードは以下のとおりなので、
ここに画像の説明を挿入
ツールクラスは以下のように記述します。

package com.yulisao.utils;


import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class ConverterUtil {
    
    

    /**
     * 复制对象
     */
    public static <T,K> T convert(K source, Class<T> clazz) {
    
    
        T t = BeanUtils.instantiate(clazz);
        BeanUtils.copyProperties(source, t);
        return t;
    }

    /**
     * 复制集合
     */
    public static <T,K> List<T> convertList(List<K> sourceList, Class<T> clazz) {
    
    
        if (CollectionUtils.isEmpty(sourceList)) {
    
    
            return null;
        }

        ArrayList<T> target = new ArrayList<>();
        sourceList.forEach(k -> target.add(convert(k, clazz)));
        return target;
    }
}

呼び出し例は以下の通り

public static void main(String[] args) {
    
    
        UserVO vo = new UserVO(); // 实际中从数据库查询得到数据
        UserPO po = ConverterUtil.convert(vo, UserPO.class); // 进行转换,最好先判vo是否空
        
        List<UserVO> voList = new ArrayList<>(); // 实际中从数据库查询得到数据
        List<UserPO> poList = ConverterUtil.convertList(voList, UserPO.class); // 进行转换,最好先判voList是否空
    }

2 つの入力パラメータは、ソース オブジェクト/ソース オブジェクト コレクションのターゲット オブジェクト.クラスです。

Supongo que te gusta

Origin blog.csdn.net/qq_29539827/article/details/129987922
Recomendado
Clasificación