[JAVA] Verwendung von Dozer.mapper

Was ist Dozer?

Eines der Mapping-Frameworks von Java. Dozer ist ein Mapping-Framework, das mithilfe von Wiederholungen Daten von einem Objekt in ein anderes kopiert. Das Framework kann nicht nur Eigenschaften zwischen Beans kopieren, sondern auch automatisch zwischen verschiedenen Typen konvertieren.

Vorteile von Dozer

Einstellmethode (Umgebung)

Gradle-Projekt

Beschreiben Sie Folgendes in der Datei "build.gradle"

Beschreibung Ort: Abhängigkeiten Beschreibungscode:

implementation 'net.sf.dozer:dozer:5.5.1'

Maven-Projekt (dieses Mal werden wir dies hauptsächlich vorstellen)

Fügen Sie pom.xml Folgendes hinzu

		<dependency>
			<groupId>net.sf.dozer</groupId>
			<artifactId>dozer</artifactId>
			<version>5.5.1</version>
		</dependency>

Sie können die zu schreibende Mapping-XML lesen, indem Sie der Datei application.context Folgendes hinzufügen.

<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
    <property name="mappingFiles"
        value="classpath*:/META-INF/dozer/**/*-mapping.xml" /><!-- (1) -->
</bean>

Wie benutzt man Dozer?

Vergleichen wir zunächst die Codebeschreibung mit und ohne Dozer.mapper.

Duzer.Kein Mapper


		input.setId(context.getId());
		input.setName(context.getName());
		input.setTitle(context.getTitle());
		input.setSubtitlle(context.getSubTitle());
		input.setBusinessDate(context.getBusinessDate());

Dozer.mit Mapper


		Mapper mapper = new DozerBeanMapper();
		mapper.map(context, input);

Wie Sie auf einen Blick sehen können, wurde die Beschreibung weitgehend weggelassen. Dieses Mal gibt es keine hierarchische Struktur von gewesen, aber trotzdem müssen Sie Getter und Setter nicht viele Male schreiben, um zu verhindern, dass das Kopieren von Werten weggelassen wird.

Ich werde es im Detail erklären, wenn ich die Gliederung sehe.

Wurde dieses Mal verwendet. Ordnen Sie dies dem zu, der zum Aufrufen des Dienstes erforderlich ist.

@Data
public class ControllerContext {
	private int id;
	private String name;
	private String title;
	private String subTitle;
	private Date businessDate;
}
@Data
public class ServiceContext {
	private int id;
	private String name;
	private String title;
	private String subtitlle;
	private Date businessDate;
}

Stellen Sie den Wert des Controllers wie folgt ein. Dann mit Dozer.mapper abbilden.

		ServiceContext input = new ServiceContext();
		context.setId(2);
		context.setName("Gut");
		context.setTitle("Titel 2");
		context.setSubTitle("Untertitel 2");
		context.setBusinessDate(DateUtils.addDays(new Date(), 1));
		Mapper mapper = new DozerBeanMapper();
		mapper.map(context, input);
		System.out.println(input);

Ausgabeergebnis


ServiceContext(id=2, name=Gut, title=Titel 2, subtitlle=Untertitel, businessDate=Mon Oct 19 00:17:38 JST 2020)
Methode Erläuterung
mapper.map() Es kann verwendet werden, indem der konvertierte Quellenname im ersten Argument und der konvertierte Be-Name im zweiten Argument beschrieben werden.

Sie können sehen, dass es normal zugeordnet ist. Auf diese Weise kann die Beschreibung der Zuordnung weggelassen und das Programm präzise geschrieben werden.

Zuordnung, wenn die Feldnamen unterschiedlich sind

Die Standardeinstellungen von Dozer kopieren automatisch Eigenschaften mit demselben Namen wie Quelle und Ziel. Benutzerdefinierte Zuordnung ist erforderlich, um Eigenschaften mit unterschiedlichen Namen zu kopieren.

Dozer-Einstellungen können entweder in XML oder in Java Config definiert werden. Es ist in Ordnung, wenn Sie diejenige verwenden, die Sie verwenden möchten, aber dieses Mal werde ich die Beschreibung im Fall von XML beschreiben.

Wenn Sie das Setup für das erste Maven-Projekt durchgeführt haben, wird die Formatdatei `-mapping.xml``` unter` resouce / META-INF / dozer``` zum Zeitpunkt der Zuordnung gelesen. Es ist geworden.

Das Mapping-XML wird wie folgt beschrieben.

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <!-- omitted -->
    <mapping>
        <class-a>com.example.mavenDemo.controller.ControllerForm</class-a>
        <class-b>com.example.mavenDemo.service.ServiceContext</class-b>
        <field>
              <a>controllerTitle</a>
              <b>title</b><!-- (1) -->
        </field>
    </mapping>
    <!-- omitted -->
</mappings>
Etikett Erläuterung
class-a Geben Sie den vollständig qualifizierten Klassennamen der Copy Source Bean im Tag an.
class-b Geben Sie den vollständig qualifizierten Klassennamen der Kopierziel-Bean im Tag an.
a <field>Im Tag<a>Geben Sie den Namen des Zuordnungsfelds der Copy Source Bean im Tag an.
b <field>Im Tag<b>Klasse im Tag-Geben Sie den Feldnamen für die Zuordnung der Kopierziel-Bean an, die a entspricht.

Die obigen benutzerdefinierten Zuordnungseinstellungen verringern den Unterschied in den Feldnamen.

Zuordnung, wenn die Datentypen unterschiedlich sind

Auch wenn der Datentyp unterschiedlich ist und es sich um ein vorhandenes Muster handelt, wird es automatisch gespeichert. Siehe unten für Konvertierungsmuster. Basic Property Mapping

Nehmen wir ein Mapping-Beispiel, in dem die `id``` des zuvor angegebenen Mappings in` int``` geändert wird.

@Data
public class ControllerForm {
	private String id;
	private String name;
	private String title;
	private String subTitle;
	private Date businessDate;
}

@Data
public class ServiceContext {
	private int id;
	private String name;
	private String title;
	private String subTitle;
	private Date businessDate;
}
		Mapper mapper = new DozerBeanMapper();
		mapper.map(context, input);

Ausführungsergebnis


ServiceContext(id=2, name=Gut, title=Titel 2, subTitle=サブTitel 2, businessDate=Mon Oct 19 17:12:25 JST 2020)

Es ist ersichtlich, dass die Zuordnung normal durchgeführt wird, selbst wenn die Datentypen unterschiedlich sind.

Referenz

In diesem Artikel konnte ich nur den Touch-Teil der Dozer-Zuordnung vorstellen. Weitere Informationen finden Sie im Referenzartikel.

Java Mapping Framework-Leistung - Codeflow Spring Boot Camp: Spring Boot + Dozer Edition Verwendung von Dozer

Recommended Posts

Verwendung von Dozer.mapper
Verwendung von Map
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Hash benutzt
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
Wie man Big Decimal benutzt
Verwendung von String [] args
Verwendung von Rails Join
Verwendung von Java Map
Ruby: Wie man Cookies benutzt
Verwendung von abhängigen :: zerstören
Verwendung von Eclipse Debug_Shell
[Rails] Verwendung der Validierung
Verwendung von Java-Variablen
[Rails] So verwenden Sie authenticate_user!
Verwendung von GC Viewer
Wie man Lombok jetzt benutzt
[Erstellen] Verwendung von JUnit
[Schienen] Verwendung von Scope
Verwendung der link_to-Methode
Verwendung des Arrays (persönliches Memorandum)
Verwendung des Bereichs (JSP & Servlet)
Verwendung der include? -Methode
[Schienen] Verwendung von Geräten (Hinweis)
Verwendung der Methode form_with
Verwendung von EventBus3 und ThreadMode
Hinweise zur Verwendung von Spring Data JDBC
Verwendung von binding.pry [noch 53 Tage]
Verwendung von HttpClient (Post) von Java
[Java] Verwendung der Join-Methode
Verwendung von Ruby on Rails
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)