通常,我们需要将域模型转换为DTO(数据传输对象),反之亦然。将数据传输到前端或远程接口时,这是必需的。手动处理复杂的映射变得很麻烦,并可能导致错误。
![3b69f9369beecde0c77adadea1c31b6f.png](https://img-blog.csdnimg.cn/img_convert/3b69f9369beecde0c77adadea1c31b6f.png)
在本文中,我想介绍MapStruct,这是一个Java注释处理器,可以在编译时为Java bean生成映射器实现。它使用简单的Java方法调用来映射对象,并且不涉及任何反射或运行时处理。
我将引导您完成将MapStruct集成到Spring Boot应用程序中的步骤。
Maven依赖
让我们创建一个示例Spring Boot应用程序,并在pom.xml中添加MapStruct及其处理器依赖性。
所述mapstruct处理器用于在编译期间产生映射器实现。
org.mapstruct
mapstruct-jdk8
1.3.0.Final
org.mapstruct
mapstruct-processor
1.3.0.Final
provided
创建JPA实体和DTO
让我们创建两个实体Library和Book。
所述mapstruct处理器用于在编译期间产生映射器实现。
package
com.swathisprasad.mapstruct.dao.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Data
@EqualsAndHashCode
@Entitypublic
class Library implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue (generator = "uuid")
@GenericGenerator (name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column (name = "id", updatable = false, nullable = false)
private UUID id;
@NotNull
@Column (name = "name", nullable = false)
private String name;
@EqualsAndHashCode.Exclude
@OneToMany(mappedBy = "library", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List books = new ArrayList<>();}
package com.swathisprasad.mapstruct.dao.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNu