[JAVA] Cartographie de Bean avec MapStruct Partie 2

Continuation de la dernière fois http://qiita.com/kentama/items/09a8573bd5d0831b470e

Créer un haricot à partir de plusieurs haricots

Bean


public class Hoge {
    private String hoge1;
    private String hoge2;
    private String hoge3;
    private String hoge4;

    // constructor/getter/setter
}

public class Fuga {
    public String fuga1;
    public String fuga2;

    // constructor/getter/setter
}

public class Piyo {
    public String piyo1;
    public String piyo2;

    // constructor/getter/setter
}

Créer un mappeur

L'attribut source @ Mapping spécifie le champ de bean à utiliser.

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

    @Mapping(target = "hoge1", source = "fuga.fuga1")
    @Mapping(target = "hoge2", source = "fuga.fuga2")
    @Mapping(target = "hoge3", source = "piyo.piyo1")
    @Mapping(target = "hoge4", source = "piyo.piyo2")
    public Hoge map(Fuga fuga, Piyo piyo);
}

Courir

Fuga fuga = new Fuga("a", "b");
Piyo piyo = new Piyo("c", "d");
Hoge hoge = HogeMapper.INSTANCE.map(fuga, piyo);

System.out.println(hoge.getHoge1()); // a
System.out.println(hoge.getHoge2()); // b
System.out.println(hoge.getHoge3()); // c
System.out.println(hoge.getHoge4()); // d

Mettre à jour le bean créé

Créer un mappeur

Ajoutez @ MappingTarget à l'argument à mettre à jour.

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

    @Mapping(target = "hoge1", source = "fuga1")
    @Mapping(target = "hoge2", source = "fuga2")
    @Mapping(target = "hoge3", source = "fuga1")
    @Mapping(target = "hoge4", source = "fuga2")
    public void updateHogeFromFuga(Fuga fuga, @MappingTarget Hoge hoge);
}

Courir

Fuga fuga = new Fuga("a", "b");
Hoge hoge = new Hoge("1", "2", "3", "4");
UpdateMapper.INSTANCE.updateHogeFromFuga(fuga, hoge);

System.out.println(hoge.getHoge1()); // a
System.out.println(hoge.getHoge2()); // b
System.out.println(hoge.getHoge3()); // a
System.out.println(hoge.getHoge4()); // b

Ajouter une méthode personnalisée

Méthode utilisant la méthode par défaut

Vous pouvez définir une méthode par défaut et ajouter votre propre méthode de mappage.

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

    default Bar fooToBar(Foo foo) {
        Bar bar = new Bar();
        bar.setBar1(foo.getFoo1());
        bar.setBar2(foo.getFoo2());
        return bar;
    }
}

Méthode utilisant une classe abstraite

Il a été créé dans la classe d'interface jusqu'à présent, mais il peut également être créé dans la classe abstraite.

@Mapper
public abstract class FooBarMapper {
    public Bar fooToBar(Foo foo) {
        Bar bar = new Bar();
        bar.setBar1(foo.getFoo1());
        bar.setBar2(foo.getFoo2());
        return bar;
    }
}

Lors de son utilisation, il est nécessaire de créer explicitement une instance.

FooBarMapperImpl mapper = new FooBarMapperImpl();
Bar bar = mapper.fooToBar(new Foo("AIUEO", "Kakikukeko"));

System.out.println(bar.getBar1()); //AIUEO
System.out.println(bar.getBar2()); //Kakikukeko

La prochaine fois.

Recommended Posts

Cartographie de Bean avec MapStruct Partie 2
Effectuer une cartographie de bean à grande vitesse à l'aide de MapStruct
Copie de bean à l'aide de MapStruct
Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Java pour apprendre avec les ramen [Partie 1]
Test de l'API REST à l'aide de REST Assured Part 2
Bean mapping utile dans Java ModelMapper
Ajouter une validation de bean avec Micronaut (Java)
Contrôle d'entrée facile avec Bean Validation!
Traitement serveur avec Java (Introduction partie 1)
Réintroduction aux opérateurs avec RxJava Partie 1