ModelMapper für Java: Vollständige Anleitung zum automatischen Object Mapping
1. Was ist ModelMapper und warum wird es benötigt?
ModelMapper ist eine leistungsstarke Java-Bibliothek für die automatische Konvertierung (Mapping) von Objekten eines Typs in Objekte eines anderen Typs. In der modernen Softwareentwicklung, insbesondere bei Verwendung einer mehrschichtigen Architektur (Controller → Service → Repository), müssen Entwickler ständig Daten zwischen DTOs (Data Transfer Objects), Entities (Datenbankentitäten), VOs (Value Objects) und anderen POJOs kopieren. Das manuelle Schreiben solchen Codes ist mühsam, fehleranfällig und führt zu aufgeblähtem Code sowie schlechterer Lesbarkeit.
Das Hauptziel von ModelMapper ist es, Entwickler vom Schreiben von Boilerplate-Code wie source.getField() → target.setField() zu befreien. Die Bibliothek analysiert die Klassenstruktur (Felder, Getter/Setter) und ordnet diese automatisch zu, basierend auf Namenskonventionen (Convention over Configuration). Sie unterstützt verschachtelte Objekte, Collections, Vererbung und komplexe Transformationen, was sie zu einem unverzichtbaren Werkzeug in Java-Unternehmensanwendungen macht.
ModelMapper ist besonders nützlich in folgenden Szenarien:
- Anwendungsschichten: Konvertierung von Entities in DTOs und umgekehrt für die Datenübertragung über REST-APIs.
- Microservices: Mapping zwischen Objekten verschiedener Dienste.
- Refactoring: Wenn sich die Klassenstruktur ändert, genügt es, das Mapping an einer Stelle anzupassen.
- Testing: Schnelles Erstellen von Testdaten auf Basis vorhandener Objekte.
2. Installation
ModelMapper wird über Maven Central bereitgestellt. Für die Installation muss die Abhängigkeit in die Datei pom.xml (für Maven) oder build.gradle (für Gradle) eingefügt werden.
Maven (pom.xml):
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.0</version>
</dependency>
Gradle (build.gradle):
implementation 'org.modelmapper:modelmapper:3.2.0'
Hinweis: Version 3.2.0 ist zum Zeitpunkt der Erstellung dieses Artikels aktuell. Es wird empfohlen, die neueste Version auf MVNRepository zu prüfen.
3. Schnellstart – Minimales funktionierendes Beispiel
Betrachten wir ein einfaches Beispiel: Wir haben eine Klasse UserEntity (Datenbankentität) und UserDTO (Datenübertragungsobjekt).
// Quellklasse (Entity)
public class UserEntity {
private Long id;
private String firstName;
private String lastName;
private String email;
// Konstruktoren, Getter und Setter
public UserEntity() {}
public UserEntity(Long id, String firstName, String lastName, String email) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
// Zielklasse (DTO)
public class UserDTO {
private Long id;
private String fullName; // Beachten Sie: Das Feld heißt anders
private String emailAddress;
// Konstruktoren, Getter und Setter
public UserDTO() {}
public Long getId() { return id; }
public void Auch in der Bibliothek
Prisma für TypeScript: vollständige Anleitung mit Beispielen
Geolokalisierung und Karten in Kotlin: Vollständiger Leitfaden zur Integration
JWT-Token in Go (Golang): Bibliothek golang-jwt und Anwendungsbeispiele