[Java] Ersetzen wir Datenobjekte durch einen Mapper ~ BeanMapper Orika ~

Was ist Orika?

Eine Bibliothek, die POJOs und Beans zugeordnet werden kann. Praktisch, da Sie die Zuordnung und Typkonvertierung einfach festlegen können.

Objekteigenschaften automatisch zuordnen

Nutzungsumgebung

Werkzeug erstellen Rahmen
Gradle Spring Boot

Das Framework wird verwendet, um die Orika-Objekte zu DI. (Siehe unten)

① Vorbereitung zur Nutzung der Bibliothek

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. ** **.

② MapperFactory instanziieren

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 die Quell- und Zielklasse von Convert fest

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);

④ Implementierung von Convert

Methode der Klasse, die die Konvertierungsverarbeitung ausführt


Zielobjekt konvertieren= boundMapperFacade.map(Quellobjekt konvertieren);

Damit ist die Konvertierung abgeschlossen.

So ordnen Sie Objekteigenschaften manuell zu

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);

Konvertieren Sie Typen und Daten mit Konvertieren

Wenn Sie einen bestimmten Typ mit Konvertieren konvertieren möchten, gehen Sie wie folgt vor.

① Erstellen Sie eine Klasse für die Typkonvertierung

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();
  }
}

(2) Registrieren Sie die Konvertierungsklasse in ConverterFactory

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;
  }
}

③ Konvertierungseinstellungen und Konvertierung

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);

Nachwort

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

[Java] Ersetzen wir Datenobjekte durch einen Mapper ~ BeanMapper Orika ~
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Lass uns mit Java kratzen! !!
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Lassen Sie uns Excel mit Java betreiben! !!
Verwenden von Mapper mit Java (Spring)
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
Erstellen eines Java-Projekts mit Gradle
Liste der Java-Objekte sortieren
Deklarieren Sie eine Methode mit einem Java-Rückgabewert mit dem Rückgabewert-Datentyp
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
Los geht's mit Watson Assistant (ehemals Conversation) ⑤ Erstellen Sie einen Chatbot mit Watson + Java + Slack
Machen wir eine Weihnachtskarte mit Verarbeitung!
Probieren wir WebSocket mit Java und Javascript aus!
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
[Java] Erstellen wir eine DB-Zugriffsbibliothek!