MapStruct für Java: Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist MapStruct und warum wird es benötigt?

MapStruct ist ein Code-Generator für Java, der automatisch Implementierungen von Mappern (Konvertern) zwischen Objekten unterschiedlicher Typen erstellt. In der modernen Java-Entwicklung müssen Objekte häufig konvertiert werden: Entity in DTO, DTO in VO, eine API-Antwort in ein anderes Modell und so weiter. Das manuelle Schreiben solchen Codes ist mühsam, zeitaufwendig und fehleranfällig. MapStruct löst dieses Problem, indem es den gesamten Boilerplate-Code zur Kompilierzeit generiert.

Die wichtigsten Vorteile von MapStruct:

  • Leistung: Code-Generierung zur Kompilierzeit (Compile-Time). Keine Reflektion, keine Performance-Einbußen zur Laufzeit. MapStruct arbeitet genauso schnell, als ob Sie das Mapping manuell geschrieben hätten.
  • Typsicherheit: Alle Fehler (Typenkonflikte, fehlende Felder) werden zur Kompilierzeit erkannt, nicht erst zur Laufzeit.
  • Einfachheit: Minimale Konfiguration. Sie definieren lediglich ein Interface oder eine abstrakte Klasse mit Mapping-Methoden, und MapStruct generiert die Implementierung automatisch.
  • Flexibilität: Unterstützung für komplexe Mappings, Typkonvertierungen, die Verwendung von Ausdrücken, Methodenaufrufe und die Integration mit anderen Bibliotheken (Lombok, Spring usw.).
  • Sauberer Code: Der Mapping-Code ist von der Geschäftslogik getrennt, was ihn lesbarer und wartbarer macht.

MapStruct ist besonders nützlich in mehrschichtigen Architekturen (Controller-Service-Repository), in denen Objekte häufig zwischen den Schichten konvertiert werden müssen.

Installation von MapStruct

MapStruct wird nicht über pip oder npm installiert, da es sich um eine Java-Bibliothek handelt. Um MapStruct in Ihr Projekt einzubinden, verwenden Sie das Build-System Maven oder Gradle.

Installation mit Maven

Fügen Sie die folgenden Abhängigkeiten in Ihre pom.xml-Datei ein:

<dependencies>
    <!-- Hauptbibliothek MapStruct -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.5.Final</version>
    </dependency>

    <!-- Annotation Processor (für die Code-Generierung) -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.5.Final</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Installation mit Gradle

Für Gradle fügen Sie in Ihre build.gradle-Datei ein:

dependencies {
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}

Wichtig: Stellen Sie sicher, dass die Version von mapstruct-processor mit der Version von mapstruct übereinstimmt. Nach dem Hinzufügen der Abhängigkeiten führen Sie einen Build Ihres Projekts durch (z. B. mvn clean compile), damit MapStruct die Mapper-Implementierungen generiert.

Schnellstart mit einem Codebeispiel

Lassen Sie uns einen einfachen Mapper erstellen, der ein Car-Objekt (Entity) in ein CarDto-Objekt (DTO) konvertiert.

Schritt 1: Definieren Sie die Quell- und Zielklassen

// Car.java
public class Car {
    private String make;
    private int numberOfSeats;
    private CarType type;

    // Konstruktoren, Getter, Setter
    public Car() {}

    public Car(String make, int numberOfSeats, CarType type) {
        this.make = make;
        this.numberOfSeats = numberOfSeats;
        this.type = type;
    }

    public String getMake() { return make; }
    public void setMake(String make) { this.make = make; }
    public int getNumberOfSeats() { return numberOfSeats; }
    public void setNumberOfSeats(int numberOfSeats) { this.numberOfSeats = numberOfSeats; }
    public CarTy                    

Empfehlungen