Entity、Dto、Vo的相互转换

一、代码编写

1. 对象entity 转换vo

 AuthorityAdmin entity = dao.findById()
 AuthorityAdminVo vo = new AuthorityAdminVo();
 
 BeanUtils.copyProperties(entity , vo);
 return vo;

2. 对象List< entity> 转换List< vo>

   //  查询数据
   List<UserAdminVo> entityList = dao.findById();
 
    //处理方法1
   List<UserAdminVo> voList = new ArrayList<>();
   
   userList.forEach(entity ->{
            UserAdminVo vo = new UserAdminVo();
            BeanUtils.copyProperties(entity , vo);
            voList.add(vo);
    }); 

    //处理方法2
   List<UserAdminVo> voList2 = authorityAdminPage.getContent().stream().map(item -> {
       UserAdminVoVo vo = new UserAdminVoVo();
       BeanUtils.copyProperties(item, vo);
       return vo;
   }).collect(Collectors.toList());


3. Jpa 下的 Page< T> 转换 Page< VO>

// 查询
Page<UserAdmin> userPage = userAdminServiceImpl.selectPage(........);

// List<entity> 转换List<vo>   -->  userPage .getContent() 
 List<AuthorityAdminVo> collect = userPage .getContent().stream().map(item -> {
       AuthorityAdminVo vo = new AuthorityAdminVo();
       BeanUtils.copyProperties(item, vo);
       return vo;
}).collect(Collectors.toList());

// 重新封装page
Page<V> vs = new PageImpl<>(voList, page.getPageable(), page.getTotalElements());
return vs ;

原生Mybatis-plus 的 Page< T> 转换 IPage< VO>

Page<UserAdmin> page = userAdminServiceImpl.page(this.getPage(), new    LambdaQueryWrapper<UserAdmin>()
                .orderByAsc(UserAdmin::getId)
                .eq(id != null, UserAdmin::getId, id)
                .like(StringUtils.isNotBlank(username), UserAdmin::getUsername, username)
        );
        
IPage<UserAdminVo> userAdminVoList =  page.convert(item -> item.convert(UserAdminVo.class))

二、进行创建工具类(简化)

package com.ws.ldy.base.entity;

import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * TODO  Dto,Vo,entity 转换工具类
 */
@SuppressWarnings("all")
public class BeanDtoVoUtils<V, E> {

    /**
     * TODO  dot ,Do ,entity 相互转换
     * 同:BeanUtils.copyProperties(dtoEntity, newInstance);
     *
     * @param oldClass 原数据--Dto,Vo,entity
     * @param newClass 转换为--Dto,Vo,entity
     * @return
     */
    public static <E> E convert(Object oldClass, Class<E> newClass) {
        // 判断oldClass 是否为空!
        if (oldClass == null) {
            return null;
        }
        // 判断newClass 是否为空
        if (newClass == null) {
            return null;
        }
        try {
            // 创建新的对象实例
            E newInstance = newClass.newInstance();
            // 把原对象数据拷贝到新的对象
            BeanUtils.copyProperties(oldClass, newInstance);
            // 返回新对象
            return newInstance;
        } catch (Exception e) {
            return null;
        }
    }
}


1. List< T> 转 List< VO> 方法

    //TODO  Page<Entity> 分页对象转 Page<Vo>  ( list 循环)
    public static <T, V> Page<V> pageVo(Page<T> page, Class<V> v) {
        try {
            List<T> tList = page.getContent();
            List<V> voList = new ArrayList<>();
            for (T t : tList) {
                V newv = (V) BeanDtoVoUtils.convert(t, v.newInstance().getClass());
                voList.add(newv);
            }
            Page<V> vs = new PageImpl<>(voList, page.getPageable(), page.getTotalElements());
            return vs;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    //TODO  Page<Entity> 分页对象转 Page<Vo> (Stream 方式)
    public static  <T, V> Page<V> pageVoStream(Page<T> page, Class<V> v) {
        List<V> voList = page.getContent().stream().map(item -> {
            try {
                return (V) BeanDtoVoUtils.convert(item, v.newInstance().getClass());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return null;
        }).collect(Collectors.toList());
        Page<V> vs = new PageImpl<>(voList, page.getPageable(), page.getTotalElements());
        return vs;
    }


2. JPA 的 page 工具类方法

  
   //TODO  list<Entity> 集合对象转list<Vo> ( list 循环)
    public static <T, V> List<V> listVo(List<T> oldList, Class<V> v) {
        try {
            List<V> voList = new ArrayList<>();
            for (T t : oldList) {
                V newv = (V) BeanDtoVoUtils.convert(t, v.newInstance().getClass());
                voList.add(newv);
            }
            return voList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    //TODO  list<Entity> 集合对象转list<Vo> (Stream 方式)
    public static <T, V> List<V> listVoStream(List<T> oldList, Class<V> v) {
        List<V> voList = oldList.stream().map(item -> {
            try {
                return (V) BeanDtoVoUtils.convert(item, v.newInstance().getClass());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return null;
        }).collect(Collectors.toList());
        return voList;
    }

3. mybatis-plus的 page -> Ipage 工具类方法

    //TODO  Page<Entity> 分页对象转 Page<Vo>  ( list 循环)
    public static <T, V> IPage<V> pageVo(Page<T> page, Class<V> v) {
    
        IPage<V> vs = page.convert(item -> {
            try {
                V newv = (V) BeanDtoVoUtils.convert(item, v.newInstance().getClass());
                return newv;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        });
        
        return vs;
    }

4. 把工具类的方法进行封装(非必需)

  /**
     * TODO  dot ,Do ,entity 相互转换
     * 同:BeanUtils.copyProperties(dtoEntity, newInstance);
     *
     * @return
     */
    public <E> E convert(Object oldClass, Class<E> newClass) {
        return BeanDtoVoUtils.convert(oldClass, newClass);
    }


    //TODO  Page<Entity> 分页对象转 Page<Vo>  ( list 循环)
    public <T, V> Page<V> pageVo(Page<T> page, Class<V> v) {
        return BeanDtoVoUtils.pageVo(page, v);
    }


    //TODO  Page<Entity> 分页对象转 Page<Vo> (Stream 方式)
    public <T, V> Page<V> pageVoStream(Page<T> page, Class<V> v) {
        return BeanDtoVoUtils.pageVoStream(page, v);
    }


    //TODO  list<Entity> 集合对象转list<Vo> ( list 循环)
    public <T, V> List<V> listVo(List<T> oldList, Class<V> v) {
        return BeanDtoVoUtils.listVo(oldList, v);
    }


    //TODO  list<Entity> 集合对象转list<Vo> (Stream 方式)
    public <T, V> List<V> listVoStream(List<T> oldList, Class<V> v) {
        return BeanDtoVoUtils.listVoStream(oldList, v);
    }

三、使用工具类

Page与List 可以通过 Stream 方式与 循环方式进行转换
请添加图片描述
list展示(图片来源于网络,侵权联删)
在这里插入图片描述
page展示(图片来源于网络,侵权联删)
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值