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

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