Un des frameworks de mappage de Java. Dozer est un framework de mappage qui utilise la récurrence pour copier des données d'un objet à un autre. Le framework peut non seulement copier des propriétés entre des beans, mais également convertir automatiquement entre différents types.
Décrivez ce qui suit dans le fichier "build.gradle"
Emplacement de la description: dépendances Code de description:
implementation 'net.sf.dozer:dozer:5.5.1'
Ajoutez ce qui suit à pom.xml
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
Vous pouvez lire le mappage xml à écrire en ajoutant ce qui suit à application.context.
<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles"
value="classpath*:/META-INF/dozer/**/*-mapping.xml" /><!-- (1) -->
</bean>
Tout d'abord, comparons la description du code avec et sans Dozer.mapper.
Duzer.Pas de mappeur
input.setId(context.getId());
input.setName(context.getName());
input.setTitle(context.getTitle());
input.setSubtitlle(context.getSubTitle());
input.setBusinessDate(context.getBusinessDate());
Dozer.avec mapper
Mapper mapper = new DozerBeanMapper();
mapper.map(context, input);
Comme vous pouvez le voir en un coup d'œil, la description a été largement omise. Cette fois, il n'y a pas de structure hiérarchique de been, mais malgré cela, vous n'avez pas à écrire plusieurs fois des getters et des setters pour éviter l'omission de la copie de valeur.
J'expliquerai en détail quand je verrai le contour.
Été à utiliser cette fois.
@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;
}
Réglez la valeur à devenir du contrôleur comme suit. Puis mappez avec Dozer.mapper.
ServiceContext input = new ServiceContext();
context.setId(2);
context.setName("Bien");
context.setTitle("Titre 2");
context.setSubTitle("Sous-titre 2");
context.setBusinessDate(DateUtils.addDays(new Date(), 1));
Mapper mapper = new DozerBeanMapper();
mapper.map(context, input);
System.out.println(input);
Résultat de sortie
ServiceContext(id=2, name=Bien, title=Titre 2, subtitlle=Sous-titre, businessDate=Mon Oct 19 00:17:38 JST 2020)
Méthode | La description |
---|---|
mapper.map() | Il peut être utilisé en décrivant le nom source converti dans le premier argument et le nom été converti dans le deuxième argument. |
Vous pouvez voir qu'il est mappé normalement. De cette manière, la description du mappage été peut être omise et le programme peut être écrit de manière concise.
Les paramètres par défaut de Dozer copient automatiquement les propriétés du même nom à la source et à la destination. Un mappage personnalisé est nécessaire pour copier des propriétés avec des noms différents.
Les paramètres du bulldozer peuvent être définis dans XML ou Java Config. C'est OK si vous utilisez celui que vous souhaitez utiliser, mais cette fois je décrirai la description dans le cas de XML.
Si vous avez effectué la configuration pour le premier projet Maven, le fichier au format
-mapping.xml``` sous `` resouce / META-INF / dozer '' sera lu au moment du mappage. Il est devenu.
Le mappage XML est décrit comme suit.
<?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>
marque | La description |
---|---|
class-a | |
class-b | |
a | <field> Dans le tag<a> Spécifiez le nom du champ de mappage du bean source de la copie dans la balise. |
b | <field> Dans le tag<b> Classe dans le tag-Spécifiez le nom de champ pour le mappage du bean de destination de copie correspondant à a. |
Les paramètres de mappage personnalisé ci-dessus atténuent les différences dans les noms de champ.
Même si le type de données est différent, s'il s'agit d'un modèle existant, il sera enregistré automatiquement. Voir ci-dessous pour les modèles de conversion. Basic Property Mapping
Prenons un exemple de mappage dans lequel id
du mappage donné précédemment est changé en int
.
@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);
Résultat d'exécution
ServiceContext(id=2, name=Bien, title=Titre 2, subTitle=サブTitre 2, businessDate=Mon Oct 19 17:12:25 JST 2020)
On peut voir que le mappage est effectué normalement même lorsque les types de données sont différents.
Dans cet article, je ne pouvais présenter que la partie tactile du mappage Dozer. Voir l'article de référence pour plus de détails.
Java Mapping Framework Performance --Codeflow Spring Boot Camp: Spring Boot + Dozer Edition Comment utiliser Dozer
Recommended Posts