首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MapStruct:如何映射到现有目标?

基础概念

MapStruct 是一个用于生成类型安全且易于维护的映射代码的代码生成器。它主要用于对象之间的属性映射,减少了手动编写映射代码的工作量,并提高了代码的可读性和可维护性。

相关优势

  1. 类型安全:MapStruct 在编译时检查映射的正确性,减少了运行时错误。
  2. 性能:生成的代码是直接的方法调用,没有反射的开销,因此性能较高。
  3. 易于维护:当源对象或目标对象的属性发生变化时,只需重新生成映射代码,而不需要手动修改映射逻辑。
  4. 灵活性:支持自定义映射逻辑,可以处理复杂的映射需求。

类型

MapStruct 支持多种类型的映射,包括:

  • 基本类型之间的映射
  • 对象之间的映射
  • 集合之间的映射
  • 枚举之间的映射

应用场景

MapStruct 广泛应用于数据传输对象(DTO)和领域模型之间的映射,特别是在使用 Spring 和 JPA 等框架进行开发时。

映射到现有目标

如果你需要将源对象的属性映射到一个已经存在的目标对象上,可以使用 @MappingTarget 注解。以下是一个示例:

示例代码

假设我们有两个类 SourceTarget

代码语言:txt
复制
public class Source {
    private String name;
    private int age;
    // getters and setters
}

public class Target {
    private String name;
    private int age;
    // getters and setters
}

我们可以定义一个映射接口 Mapper

代码语言:txt
复制
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.factory.Mappers;

@Mapper
public interface Mapper {
    Mapper INSTANCE = Mappers.getMapper(Mapper.class);

    void updateTarget(Source source, @MappingTarget Target target);
}

在这个接口中,updateTarget 方法使用了 @MappingTarget 注解,表示目标对象 target 已经存在,并且我们只需要更新它的属性。

使用示例

代码语言:txt
复制
public class Main {
    public static void main(String[] args) {
        Source source = new Source();
        source.setName("John");
        source.setAge(30);

        Target target = new Target();
        target.setName("Old Name");
        target.setAge(0);

        Mapper.INSTANCE.updateTarget(source, target);

        System.out.println(target.getName()); // 输出: John
        System.out.println(target.getAge());  // 输出: 30
    }
}

参考链接

通过这种方式,你可以高效地将源对象的属性映射到已经存在的目标对象上,避免了手动编写复杂的映射逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券