一、代码编写
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展示(图片来源于网络,侵权联删)