实体类集合转VO集合工具类

实体类集合转VO集合工具类

在工作中,涉及到了技术升级,由之前的Dubbo的RPC调用升级为Feign的Http调用。远程调用升级为Feign之后,由原本的类级别的服务暴露细化到了方法级别,大幅提高了代码得安全性,减少不必要的资源浪费。由于公司项目众多,不可能一次性全部升级,并且为了尽可能的减少不必要的工作量,就采用了以下方案,将原先map类型参数转换为对应的DTO,而直接返回的实体则采用了VO进行再包装。单个实体转VO,可以直接使用org.springframework.beans.BeanUtils提供的copyProperties(source, target)方法,直接将实体中各字段对应的值拷贝到VO中(注意:实体与VO的字段名和类型应保持一致)。List这种类型的,可以直接使用for循环进行复制。但是考虑到工作量较大,就写了一个工具类。

入参为未知类型的实体集合与目标集合的泛型字节码类型(类名.class)

创建一个新集合用来存储最终结果,泛型为目标类型T

遍历循环实体集合

通过Class获取构造器并创建新的实例

使用BeanUtils.copyProperties,将实体数据拷贝到目标类型

将拷贝过数据的目标类型添加到集合中

public static <T> List<T> entityListToVOList(List<?> list, Class<T> clazz) {
    List<T> result = new ArrayList<>(list.size());
    for (Object source : list) {
        T target;
        try {
            target = clazz.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException();
        }
        BeanUtils.copyProperties(source, target);
        result.add(target);
    }
    return result;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实类集合VO集合可以使用两种方法。其中,方法一是使用BeanUtils.copyProperties()方法进行属性赋值,前提是实体类和VO类的属性名一致。方法二是使用MapStruct框架,它可以处理属性名不一致的情况。 方法一:使用BeanUtils.copyProperties()方法 前提是实体类和VO类的属性名一致。可以使用以下代码将实体集合换为VO集合: ``` List<Entity> entityList = ...; // 实体集合 List<EntityVo> entityVoList = new ArrayList<>(); // VO集合 for (Entity entity : entityList) { EntityVo entityVo = new EntityVo(); BeanUtils.copyProperties(entity, entityVo); entityVoList.add(entityVo); } ``` 方法二:使用MapStruct框架 如果实体类和VO类的属性名不一致,可以使用MapStruct框架进行属性映射。首先,在POM文件中添加MapStruct的依赖: ``` <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.CR1</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.2.0.CR1</version> </dependency> ``` 然后,在实体类和VO类之间创建一个Mapper接口,定义属性映射方法: ``` @Mapper public interface EntityMapper { EntityMapper INSTANCE = Mappers.getMapper(EntityMapper.class); EntityVo entityToVo(Entity entity); } ``` 最后,通过调用Mapper接口的方法,将实体集合换为VO集合: ``` List<Entity> entityList = ...; // 实体集合 List<EntityVo> entityVoList = entityList.stream() .map(EntityMapper.INSTANCE::entityToVo) .collect(Collectors.toList()); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值