mapstructのオブジェクトコピーの方法は何ですか?
MapStructは、オブジェクト間のマッピングコードを自動的に生成するJava注釈処理器です。マッピングインターフェースを実装する実装クラスを自動生成し、ソースオブジェクトのプロパティを自動的にターゲットオブジェクトにコピーして、オブジェクト間のプロパティコピーを実現することができます。
MapStructを使用したオブジェクトのコピー手順は次のとおりです:
- ソースオブジェクトとターゲットオブジェクトのクラスを定義し、それらの間には異なる属性名が存在する可能性があります。
- @Mapper注解を使用して、ソースオブジェクトとターゲットオブジェクトの属性マッピング関係を指定する@Mapping注解を持つマッピングインターフェースを作成してください。
- MapStructの注釈処理器を使用して、マッピングインターフェースの実装クラスを自動生成します。
- 実装クラスを使用してマッピングインタフェースをコード内で使い、その提供されたメソッドを呼び出してオブジェクト間のプロパティをコピーします。
簡単なオブジェクトのコピーには、@Mapping注釈を使用して属性のマッピング関係を指定することができます。複雑なオブジェクトのコピーには、カスタムの変換メソッドやコンバータを使用して、属性間の変換ロジックを処理することができます。
MapStructを使用してオブジェクトをコピーする例が以下に示されています。
// 定义源对象和目标对象的类
public class SourceObject {
private String name;
private int age;
// getter and setter
}
public class TargetObject {
private String name;
private int age;
// getter and setter
}
// 创建映射接口
@Mapper
public interface ObjectMapper {
// 指定属性的映射关系
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
TargetObject mapToTarget(SourceObject source);
}
// 在代码中使用映射接口的实现类
public class Main {
public static void main(String[] args) {
SourceObject source = new SourceObject();
source.setName("John");
source.setAge(20);
ObjectMapper mapper = new ObjectMapperImpl();
TargetObject target = mapper.mapToTarget(source);
System.out.println(target.getName()); // 输出: John
System.out.println(target.getAge()); // 输出: 20
}
}
上記の例では、@Mapping注釈を使用して、ソースオブジェクトとターゲットオブジェクト間のプロパティマッピング関係が指定されています。実装クラスでは、ObjectMapperインターフェースがコードの実装を自動生成し、ソースオブジェクトからターゲットオブジェクトへのプロパティコピーが実現されます。