我最近开始在一个项目中使用MapStruct映射工具。过去,为了映射DTO->实体,反之亦然,我使用自定义映射器,例如:
public static CustomerDto toDto(Customer customer) {
return isNull(customer)
? null
: CustomerDto.builder()
.id(customer.getId())
.name(customer.getName())
.surname(customer.getSurname())
.phoneNumber(customer.getPhoneNumber())
.email(customer.getEmail())
.customerStatus(customer.getCustomerStatus())
.username(customer.getUsername())
.NIP(customer.getNIP())
.build();
}
在尝试获取一个可选对象时,我可以通过以下方式将实体映射到dto:
public Optional<CustomerDto> findOneById(final long id) {
return customerRepository.findById(id).map(CustomerMapper::toDto);
}
目前,正如我之前提到的,我使用的是mapStruct,问题是我的映射器是这样的,而不是类,它是这样的接口:
@Mapper
public interface CommentMapper {
@Mappings({
@Mapping(target = "content", source = "entity.content"),
@Mapping(target = "user", source = "entity.user")
})
CommentDto commentToCommentDto(Comment entity);
@Mappings({
@Mapping(target = "content", source = "dto.content"),
@Mapping(target = "user", source = "dto.user")
})
Comment commentDtoToComment(CommentDto dto);
}
我想知道是否可以在stream gentle中使用这个接口方法来映射我的值,而不需要包装值,比如:
public Optional<CommentDto> findCommentById(final long id) {
Optional<Comment> commentById = commentRepository.findById(id);
return Optional.ofNullable(commentMapper.commentToCommentDto(commentById.get()));
}
谢谢你的帮助。
像这样访问映射器:
private static final YourMapper MAPPER = Mappers.getMapper(YourMapper.class);
final Optional<YourEntity> optEntity = entityRepo.findById(id);
return optEntity.map(MAPPER::toDto).orElse(null);
基本上,我们用枚举做类似的事情
@Mapping(target = "type", expression = "java(EnumerationType.valueOf(entity.getType()))")
您可以在@Mapping注释中定义java表达式
@Mapping(target = "comment", expression = "java(commentMapper.commentToCommentDto(commentRepository.findById(entity.commentId).orElse(null)))"
class CommentMapper { ... }
@Mapper(uses = {CommentMapper.class})
@BeforeMapping
default void beforeMappingToDTO(Entity source, @MappingTarget Dto target) {
target.setComment(commentMapper.commentToCommentDto(commentRepository.findById(entity.commentId).orElse(null)));
}
最近我正在学习Java8个特性,所以我从lambda表达式开始,然后我遇到了Java流API,现在我正在尝试围绕流API中的方法,它们是如何工作的? 我对lambda表达式的理解是,如果我们想将lambda表达式传递给该方法,那么我们需要使用单个未实现的方法(Java 8接口可以有默认实现)创建一个与lambda表达式的签名匹配的接口。然后,传递lambda表达式的方法可以通过调用接口方法来执行l
问题内容: 我在Java中有以下情形。假设我有一个接口,以及两个实现此接口的类。如下: 公共接口myInterface { } 公共类A实现myInterface { } 公共类B实现myInterface { } 如果定义如下,如何调用上面的printOtherStuff方法: 上面的调用代码似乎无效。有任何想法吗? 问题答案: 的参考类型为。这意味着您只能访问接口中定义的方法。您可以将其强制类
请求接口的代码:
问题内容: 因此,我正在编写一个使用大型c 库的Android应用。我可以正常工作,以便Java应用程序可以调用c 委托方法,但是我发现自己希望自己可以将来自c 的消息记录到Android日志中。从Java上这很容易,但是我不知道如何从c 调用Java方法。我的搜索找到了从c 打开jvm的方法,这根本不是我想要做的。理想情况下,我想将日志方法指针传递给c ,然后可以在需要时使用它。当然,Java不
LFMultipleLivenessManager 调用流程 LFMultipleLivenessManager 是对LFMultipleLivenessController 调用流程进一步的封装,方便用户直接调用 1 初始化 LFMultipleLivenessManager 输入token token LFMultipleLivenessManager *manager = [[LFMulti
1.初始化 创建LFLivenessSDK对象detector,具体传参请查看demo /** * 获取token * 强烈建议:appID不要放在客户端 */ private void requestToken() { } 设置参数,开启人脸识别 /** * 开始人脸识别 */ LFLivenessBu