MapStruct 是一个用于生成类型安全且易于使用的对象映射代码的代码生成器。它主要用于简化 Java 对象之间的映射过程,减少手动编写映射代码的工作量。双向实体方法指的是在两个实体类之间进行相互转换的方法。
MapStruct 支持多种类型的映射,包括但不限于:
MapStruct 常用于以下场景:
假设有两个实体类 User
和 UserDTO
,它们之间的映射可以使用 MapStruct 来实现。
public class User {
private Long id;
private String name;
private String email;
// getters and setters
}
public class UserDTO {
private Long id;
private String fullName;
private String emailAddress;
// getters and setters
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(source = "name", target = "fullName")
@Mapping(source = "email", target = "emailAddress")
UserDTO userToUserDTO(User user);
@Mapping(source = "fullName", target = "name")
@Mapping(source = "emailAddress", target = "email")
User userDTOToUser(UserDTO userDTO);
}
public class Main {
public static void main(String[] args) {
User user = new User();
user.setId(1L);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
UserDTO userDTO = UserMapper.INSTANCE.userToUserDTO(user);
System.out.println(userDTO.getFullName()); // 输出: John Doe
User mappedUser = UserMapper.INSTANCE.userDTOToUser(userDTO);
System.out.println(mappedUser.getName()); // 输出: John Doe
}
}
原因:可能是由于 MapStruct 的注解处理器没有正确配置。
解决方法:
pom.xml
或 build.gradle
中添加了 MapStruct 的依赖和插件。Maven 配置示例:
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
Gradle 配置示例:
dependencies {
implementation 'org.mapstruct:mapstruct:1.5.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.2.Final'
}
通过以上配置,MapStruct 应该能够正确生成映射代码并生效。
领取专属 10元无门槛券
手把手带您无忧上云