Eine Bibliothek, die POJOs und Beans zugeordnet werden kann. Praktisch, da Sie die Zuordnung und Typkonvertierung einfach festlegen können.
Werkzeug erstellen | Rahmen |
---|---|
Gradle | Spring Boot |
Das Framework wird verwendet, um die Orika-Objekte zu DI. (Siehe unten)
Fügen Sie den Abhängigkeiten von build.gradle die folgende Zeile hinzu. Bitte lesen Sie die entsprechende Version.
build.gradle
compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'
** Wenn Sie ein anderes Build-Tool verwenden, verwenden Sie bitte [diesen Link](https://mvnrepository.com/artifact/ma.glasnost.orika/orika-core/1.5.4), um die Beschreibung entsprechend Ihrer Umgebung zu beschreiben. bitte beziehen Sie sich auf. ** **.
Sie können neu in der Klasse sein, die Sie verwenden, aber offiziell ist es besser, sie singleton zu machen Es scheint, dass die Leistung gut ist, also habe ich dieses Mal die DI-Funktion von Spring verwendet, um sie singleton zu machen.
ConvertMapper.class
@Componet
public class ConvertMapper {
@Bean
public MapperFactory getMapperFactory(){
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
return mapperFactory;
}
}
Feldvariablen der Klasse, die die Konvertierungsverarbeitung ausführt
@Autowired
private MapperFactory mapperFactory;
Legen Sie den Klassennamen des Objekts (für das die Daten festgelegt sind) als Namen der Konvertierungsquellenklasse fest. Legen Sie den Klassennamen des zu konvertierenden Objekts (den Sie von nun an festlegen möchten) im Namen der Konvertierungszielklasse fest.
Methode der Klasse, die die Konvertierungsverarbeitung ausführt
BoundMapperFacade<Konvertieren Sie den Namen der Quellklasse,Konvertieren Sie den Namen der Zielklasse> boundMapperFacade =
mapperFactory.getMapperFacade(Konvertieren Sie den Namen der Quellklasse.class,Konvertieren Sie den Namen der Zielklasse.class);
Methode der Klasse, die die Konvertierungsverarbeitung ausführt
Zielobjekt konvertieren= boundMapperFacade.map(Quellobjekt konvertieren);
Damit ist die Konvertierung abgeschlossen.
Wenn Sie eine Klasse mit der folgenden Struktur haben und von A nach B konvertieren möchten, ** Kann nicht durch automatische Zuordnung konvertiert werden, da die Feldvariablennamen unterschiedlich sind. ** **.
Schimmel | Quelle konvertieren | Ziel konvertieren |
---|---|---|
ClassA | ClassB | |
int | id | id |
String | propatyA | propatyB |
Daher muss der Name der gepaarten Eigenschaft explizit angegeben werden, bevor das Objekt konvertiert wird. ** * [Objekteigenschaften automatisch zuordnen](https://qiita.com/NekozeDaisensei/items/92e9d5d653119a90f991#%E3%82%AA%E3%83%96%E3%82%B8%E3%82% A7% E3% 82% AF% E3% 83% 88% E3% 81% AE% E3% 83% 97% E3% 83% AD% E3% 83% 91% E3% 83% 86% E3% 82% A3% E3% 82% 92% E8% 87% AA% E5% 8B% 95mapping% E3% 81% 99% E3% 82% 8B) Gleich bis Schritt ③ **
Methode der Klasse, die die Konvertierungsverarbeitung ausführt
mapperFactory.classMap(InputEstimateData.class, EstimateDataValue.class)
.field("propatyA","propatyB") //Geben Sie den Namen der Eigenschaft an, die zugeordnet werden soll.
.byDefault() //Der Rest wird automatisch zugeordnet
.register();
//Gleiches gilt für die Ausführung von Convert
Zielobjekt konvertieren= boundMapperFacade.map(Quellobjekt konvertieren);
Wenn Sie einen bestimmten Typ mit Konvertieren konvertieren möchten, gehen Sie wie folgt vor.
Erstellen Sie eine Klasse, die die folgenden Klassen gemäß den Konvertierungsbedingungen erbt.
Nur unidirektionale Konvertierung | Bidirektionale Umwandlung |
---|---|
ma.glasnost.orika.CustomConverter | ma.glasnost.orika.converter.BidirectionalConverter |
Ein Beispiel ist eine bidirektionale Konvertierungsklasse vom Typ java.sql.Timestamp und vom Typ java.util.LocalDateTime.
Beispiel: Bidirektionale Konvertierung zwischen LocalDateTime und Timestamp
import java.sql.Timestamp;
import java.time.LocalDateTime;
public class DataConverter extends BidirectionalConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertTo(LocalDateTime source, Type<Timestamp> destinationType, MappingContext mappingContext) {
return Timestamp.valueOf(source);
}
@Override
public LocalDateTime convertFrom(Timestamp source, Type<LocalDateTime> destinationType, MappingContext mappingContext) {
return source.toLocalDateTime();
}
}
Es gibt zwei Möglichkeiten, sich zu registrieren.
Methode 1. Bei Anwendung auf alle Conversions
python
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
converterFactory.registerConverter(new DataConverter());
Methode 2. Wenn Sie die Zieleigenschaft während der Konvertierung angeben
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
converterFactory.registerConverter("Managementname",new DataConverter());
Legen Sie den obigen Inhalt mit der Methode fest, mit der die Instanz von MapperFactory erstellt wird.
ConvertMapper.class
@Componet
public class ConvertMapper {
@Bean
public MapperFactory getMapperFactory(){
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
//Holen Sie sich Converter Factory
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
//Bei Angabe der Zieleigenschaft zum Zeitpunkt der Konvertierung
converterFactory.registerConverter("Managementname",new DataConverter());
//Bei Anwendung auf alle Conversions
converterFactory.registerConverter(new DataConverter());
return mapperFactory;
}
}
BoundMapperFacade<Konvertieren Sie den Namen der Quellklasse,Konvertieren Sie den Namen der Zielklasse> boundMapperFacade =
mapperFactory.getMapperFacade(Konvertieren Sie den Namen der Quellklasse.class,Konvertieren Sie den Namen der Zielklasse.class);
//Konvertierungsbedingungen für Methode 2 festlegen (für Methode 2 nicht erforderlich)
// java.util.LocalDateTime Java.sql.In Zeitstempeltyp und Karte konvertieren
mapperFactory.classMap(Konvertieren Sie den Namen der Quellklasse.class,Konvertieren Sie den Namen der Zielklasse.class)
.fieldMap("Eigenschaftsname, der der Quellklasse konvertieren zugeordnet werden soll","Eigenschaftsname, der der Zielklasse konvertieren zugeordnet werden soll")
.converter("Verwaltungsname, der bei der Registrierung bei ConverterFactory angegeben wurde")
.add()
.byDefault()
.register();
//Gleiches gilt für die Ausführung von Convert
Zielobjekt konvertieren= boundMapperFacade.map(Quellobjekt konvertieren);
Es war eine bequeme Möglichkeit, Orika von BeanMapper zu verwenden, die nicht sehr oft auftaucht. Ich habe das Gefühl, dass ich die meisten Dinge, die ich hier schreibe, tun kann.
Was nicht ins Tageslicht fällt, ist, dass Lombok einen Konstruktor erstellen kann, der Argumente für alle Eigenschaften festlegt ... Das bringt dich schließlich nicht aus der Getter-Hölle heraus. Dies ist praktisch, da Orika automatisch zuordnet, wenn der Name der Eigenschaft identisch ist.
Recommended Posts