Une bibliothèque qui peut être mappée aux POJO et aux beans. Pratique car vous pouvez facilement spécifier le mappage et la conversion de type.
Outil de création | Cadre |
---|---|
Gradle | Spring Boot |
Le framework est utilisé pour DI les objets Orika. (Voir ci-dessous)
Ajoutez la ligne suivante aux dépendances de build.gradle. Veuillez lire la version appropriée.
build.gradle
compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'
** Si vous utilisez un autre outil de compilation, veuillez utiliser [ce lien](https://mvnrepository.com/artifact/ma.glasnost.orika/orika-core/1.5.4) pour décrire la description en fonction de votre environnement. prière de se référer à. ** **
Vous pouvez nouveau dans la classe que vous utilisez, mais officiellement, il est préférable de la rendre singleton Il semble que les performances soient bonnes, donc cette fois j'ai utilisé la fonction DI de Spring pour le rendre singleton.
ConvertMapper.class
@Componet
public class ConvertMapper {
@Bean
public MapperFactory getMapperFactory(){
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
return mapperFactory;
}
}
Variables de champ de la classe qui effectue le traitement de conversion
@Autowired
private MapperFactory mapperFactory;
Définissez le nom de classe de l'objet (celui pour lequel les données sont définies) comme nom de classe source de conversion, Définissez le nom de classe de l'objet à convertir (celui que vous souhaitez définir à partir de maintenant) dans le nom de classe de destination de la conversion.
Méthode de classe qui effectue le traitement de conversion
BoundMapperFacade<Convertir le nom de la classe source,Convertir le nom de la classe de destination> boundMapperFacade =
mapperFactory.getMapperFacade(Convertir le nom de la classe source.class,Convertir le nom de la classe de destination.class);
Méthode de classe qui effectue le traitement de conversion
Convertir l'objet de destination= boundMapperFacade.map(Convertir l'objet source);
Ceci termine la conversion.
Si vous avez une classe avec la structure suivante et que vous souhaitez convertir de A en B, ** Ne peut pas être converti par mappage automatique car les noms des variables de champ sont différents. ** **
Moule | Convertir la source | Convertir la destination |
---|---|---|
ClassA | ClassB | |
int | id | id |
String | propatyA | propatyB |
Par conséquent, il est nécessaire de spécifier explicitement le nom de la propriété associée avant de convertir l'objet. ** * [Mapper automatiquement les propriétés des objets](https://qiita.com/NekozeDaisensei/items/92e9d5d653119a90f991#%E3%82%AA%E3%83%96%E3%82%B8%E3%82% A7% E3% 82% FA% 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% 95 mappage% E3% 81% 99% E3% 82% 8B) Idem jusqu'à l'étape ③ **
Méthode de classe qui effectue le traitement de conversion
mapperFactory.classMap(InputEstimateData.class, EstimateDataValue.class)
.field("propatyA","propatyB") //Spécifiez le nom de la propriété à mapper.
.byDefault() //Le reste est automatiquement mappé
.register();
//Idem pour l'exécution de Convert
Convertir l'objet de destination= boundMapperFacade.map(Convertir l'objet source);
Si vous souhaitez convertir un type spécifique avec Convertir, procédez comme suit.
Créez une classe qui hérite des classes suivantes en fonction des conditions de conversion.
Conversion unidirectionnelle uniquement | Conversion bidirectionnelle |
---|---|
ma.glasnost.orika.CustomConverter | ma.glasnost.orika.converter.BidirectionalConverter |
Un exemple est une classe de conversion bidirectionnelle de type java.sql.Timestamp et de type java.util.LocalDateTime.
Exemple: conversion bidirectionnelle entre LocalDateTime et 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();
}
}
Il existe deux façons de s'inscrire.
Méthode 1. Lors de l'application à toutes les conversions
python
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
converterFactory.registerConverter(new DataConverter());
Méthode 2. Lors de la spécification de la propriété cible lors de la conversion
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
converterFactory.registerConverter("Nom de la direction",new DataConverter());
Définissez le contenu ci-dessus avec la méthode qui crée une instance de MapperFactory.
ConvertMapper.class
@Componet
public class ConvertMapper {
@Bean
public MapperFactory getMapperFactory(){
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
//Obtenez Converter Factory
ConverterFactory converterFactory = mapperFactory.getConverterFactory();
//Lors de la spécification de la propriété cible au moment de la conversion
converterFactory.registerConverter("Nom de la direction",new DataConverter());
//Lors de l'application à toutes les conversions
converterFactory.registerConverter(new DataConverter());
return mapperFactory;
}
}
BoundMapperFacade<Convertir le nom de la classe source,Convertir le nom de la classe de destination> boundMapperFacade =
mapperFactory.getMapperFacade(Convertir le nom de la classe source.class,Convertir le nom de la classe de destination.class);
//Définir les conditions de conversion pour la méthode 2 (non requis pour la méthode 2)
// java.util.LocalDateTime java.sql.Convertir en type et carte d'horodatage
mapperFactory.classMap(Convertir le nom de la classe source.class,Convertir le nom de la classe de destination.class)
.fieldMap("Nom de propriété à mapper de la classe source Convert","Nom de propriété à mapper de la classe de destination Convertir")
.converter("Nom de gestion spécifié lors de l'enregistrement auprès de ConverterFactory")
.add()
.byDefault()
.register();
//Idem pour l'exécution de Convert
Convertir l'objet de destination= boundMapperFacade.map(Convertir l'objet source);
C'était une façon d'utiliser Orika de BeanMapper, ce qui est pratique mais pas très visible. Je sens que je peux faire la plupart des choses que j'écris ici.
Ce qui n'attrape pas la lumière, c'est que Lombok peut créer un constructeur qui définit des arguments pour toutes les propriétés ... Après tout, cela ne vous sort pas de Getter Hell. Ceci est pratique car Orika mappera automatiquement si le nom de propriété est le même.
Recommended Posts