mapstruct框架和mappings注解的使用

mapstruct框架

MapStruct 是一个基于注解的 Java 对象映射工具,它可以自动生成 Java Bean 之间的映射代码,减少手写映射代码的工作量,提高开发效率。
MapStruct 的优势在于:
通过注解来定义映射规则,减少手写映射代码的工作量;
支持多种类型之间的映射,包括简单类型、复杂类型、枚举、集合等;
支持逐个字段映射和自定义映射规则;
映射接口与实现相分离,可以方便地进行单元测试和模块化开发;
由于 MapStruct 生成的映射代码是基于 Java Bean 的 getter 和 setter 方法,因此可以与其他 Java Bean 相互转换。
使用 MapStruct 可以通过以下步骤来进行:
在 Maven 或 Gradle 中添加 MapStruct 依赖。
定义映射接口,在接口中定义映射方法。
使用 @Mapper 注解标记映射接口,并指定映射规则。
在需要进行映射的代码中使用 MapStruct 生成的映射接口。
例如,定义一个 User 类和一个 UserDTO 类,通过 MapStruct 进行映射:

public class User {
    private Long id;
    private String name;
    // getter 和 setter 方法
}

public class UserDTO {
    private Long id;
    private String name;
    // getter 和 setter 方法
}

定义映射接口:

@Mapper
public interface UserMapper {
    UserDTO toUserDTO(User user);
}

使用 MapStruct 生成的映射接口:

UserMapper userMapper = Mappers.getMapper(UserMapper.class);
UserDTO userDTO = userMapper.toUserDTO(user);

mappings注解

org.mapstruct 包下的 @Mappings 和 @DecoratedWith 注解是 MapStruct 中用于定义映射规则和装饰器的注解。
@Mappings 注解用于定义多个 @Mapping 注解,表示多个字段之间的映射关系。@Mapping 注解用于指定源对象和目标对象之间的字段映射关系,例如:

@Mappings({
    @Mapping(source = "sourceField1", target = "targetField1"),
    @Mapping(source = "sourceField2", target = "targetField2")
})
TargetObject sourceToTarget(SourceObject source);

上述代码中,使用 @Mappings 注解定义了两个 @Mapping 注解,表示 sourceField1 映射到 targetField1,sourceField2 映射到 targetField2。
@DecoratedWith 注解用于指定装饰器类,用于对映射接口进行增强。装饰器类可以实现 Mapper 接口,并对其中的方法进行增强或修改。例如:

import org.mapstruct.Mapper;

@Mapper
@DecoratedWith(UserMapperDecorator.class)
public interface UserMapper {

    UserDto toDto(User user);

    User toEntity(UserDto userDto);
}

上述代码中,使用 @DecoratedWith 注解指定了 UserMapperDecorator 类,用于对 UserMapper 接口进行增强。UserMapperDecorator 类可以实现 UserMapper 接口,并对其中的方法进行增强或修改。
使用 @Mappings 和 @DecoratedWith 注解可以更加灵活地定义映射规则和装饰器,以满足不同的业务需求。同时,使用 MapStruct 可以自动生成映射接口的实现代码,提高开发效率。

你可能感兴趣的:(java)