当我们需要将DTO转换为实体(Hibernate实体等)并向后转换时,我们都会面临混乱的开销代码。
在我的示例中,我将用Java 8演示代码如何变得越来越短。
让我们创建目标DTO:
public class ActiveUserListDTO {public ActiveUserListDTO() {}public ActiveUserListDTO(UserEntity userEntity) {this.username = userEntity.getUsername();...}
}
使用Spring数据JPA API检索所有实体的简单查找方法:
userRepository.findAll();Problem:Find.All() method signature (like many others) returns java.lang.Iterable<T>
1java.lang.Iterable<T> findAll(java.lang.Iterable<ID> iterable)
我们不能使用java.lang.Iterable(*在集合上运行的Streams来制作Stream。每个Collection都是Iterable,但并不是每个Iterable都是必需的Collection)。
那么,如何获取Stream对象以获得Java8 Lambda的Power?
让我们使用StreamSupport对象将Iterable转换为Stream:
Stream<UserEntity> userEntityStream = StreamSupport.stream(userRepository.findAll().spliterator(), false);
大。 现在,我们掌握了Stream,这是Java 8 Labmda的关键!
剩下的就是地图和收集:
List<ActiveUserList> activeUserListDTOs =userEntities.stream().map(ActiveUserList::new).collect(Collectors.toList());
我正在使用Java 8 Method Reference,因此将每个实体初始化(和映射)到dto中。
因此,让我们对所有内容进行简短介绍:
List<ActiveUserList> activeUserListDTOs=StreamSupport.stream(userRepository.findAll().spliterator(), false).map(ActiveUserList::new).collect(Collectors.toList());
那很整齐!!
伊丹
相关文章:
- 使用Spring AOP,自定义注释和反射为您的应用程序审核基础结构
- AmazonSQS和Spring用于消息传递队列
- 身份验证和授权服务作为开源解决方案
- 使用Spring Integration使用Future对象调用Async方法调用
翻译自: https://www.javacodegeeks.com/2014/07/mapping-your-entities-to-dtos-using-java-8-lambda-expressions.html