[JAVA] Comment utiliser Dozer.mapper

Qu'est-ce que Dozer

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.

Avantages du bulldozer

Méthode de réglage (environnement)

Projet Gradle

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'

Projet Maven (cette fois, nous allons principalement l'introduire)

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>

Comment utiliser Dozer

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.

Mappage lorsque les noms de champ sont différents

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 Spécifiez le nom de classe complet du bean source de la copie dans la balise.
class-b Spécifiez le nom de classe complet du bean de destination de la copie dans la balise.
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.

Mappage lorsque les types de données sont différents

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.

référence

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

Comment utiliser Dozer.mapper
Comment utiliser Map
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser le hachage
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
Comment utiliser l'API Chain
[Java] Comment utiliser Map
Comment utiliser Queue avec priorité
[Rails] Comment utiliser enum
Comment utiliser java Facultatif
Comment utiliser JUnit (débutant)
Comment utiliser le retour Ruby
[Rails] Comment utiliser enum
Comment utiliser @Builder (Lombok)
Comment utiliser la classe Java
Comment utiliser Big Decimal
Comment utiliser String [] args
Comment utiliser la jonction de rails
Comment utiliser Java Map
Ruby: Comment utiliser les cookies
Comment utiliser Dependant :: Destroy
Comment utiliser Eclipse Debug_Shell
[Rails] Comment utiliser la validation
Comment utiliser les variables Java
[Rails] Comment utiliser authenticate_user!
Comment utiliser GC Viewer
Comment utiliser Lombok maintenant
[Création] Comment utiliser JUnit
[Rails] Comment utiliser Scope
Comment utiliser la méthode link_to
Comment utiliser le tableau (mémorandum personnel)
Comment utiliser scope (JSP & Servlet)
Comment utiliser la méthode include?
[Rails] Comment utiliser l'appareil (Remarque)
Comment utiliser la méthode form_with
Comment utiliser EventBus3 et ThreadMode
Remarques sur l'utilisation de Spring Data JDBC
Comment utiliser binding.pry [53 jours restants]
Comment utiliser HttpClient de Java (Post)
[Java] Comment utiliser la méthode de jointure
Comment utiliser Ruby on Rails
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)