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.
Beschreiben Sie Folgendes in der Datei "build.gradle"
Beschreibung Ort: Abhängigkeiten Beschreibungscode:
implementation 'net.sf.dozer:dozer:5.5.1'
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>
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.
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 | |
class-b | |
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.
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.
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