Comment réaliser la conversion entre VO et DTO en Java
1. Contexte
1. Les classes d'entités dans le modèle de domaine sont divisées en quatre types : VO, DTO, DO. , PO
2. Explication détaillée
1.VO (View Object), objet de visualisation, utilisé dans la couche de présentation, sa fonction est de mettre une page (ou un composant) spécifié ) encapsule toutes les données.
2.DTO (Data Transfer Object), ce concept vient du modèle de conception J2EE. L'objectif initial est de fournir des entités de données à granularité grossière pour les applications distribuées EJB afin de réduire le nombre d'appels de type. , améliorant ainsi les performances des appels distribués et réduisant la charge du réseau, mais ici, je fais généralement référence aux objets de transfert de données entre la couche de présentation et la couche de service.
3.DO (Domain Object), objet de domaine, est une entité commerciale tangible ou immatérielle abstraite du monde réel.
4.PO (PersistentObject), objet de persistance, qui forme une relation de mappage un-à-un avec la structure de données de la couche de persistance (généralement une base de données relationnelle). base de données, alors, chaque champ (ou plusieurs) de la table de données correspond à un (ou plusieurs) attributs de PO.
5. Exemple :
Le backend renvoie un objet front-end, vous pouvez ***VO.java
objet d'entité de table dao généré par mybatis, vous pouvez ****PO.java
Généralement, PO convertit DO puis convertit DTO pour fournir des services pour les appels externes
Note
#🎜🎜 #PO est généralement généré automatiquement et les champs de table sont mappés un par unDO a généralement les mêmes champs que DO, mais de nombreux champs de type sont des énumérations, et dans certains projets, DO est une classe se terminant par Model# 🎜🎜##🎜 🎜#DTO est comme l'interface de service Web (qui fournit des services externes). Les objets de résultat renvoyés sont tous des DTO. La définition des attributs à l'intérieur est assez particulière. Elle est facile à comprendre, sûre et facile à développer. Que la relation entre DTO et DTO soit inclusive ou parallèle, elle doit être prise en compte lors de la conception. Définissez-la clairement, sinon ce sera un piège plus tard VO est relativement simple, il suffit de définir ce qui est nécessaire pour le front. -end display 3. Conversion entre objets entité Un projet standardLe code regorge de classes pojo telles que VO, From, DTO , DO, etc. Ces classes ont des fonctions différentes mais les valeurs d'attribut dans les classes sont souvent exactement les mêmes. Lorsqu'il y a plusieurs attributs, c'est en effet très fatigant et prend beaucoup de temps. En fait, le puissant Spring nous a déjà préparé des outils bien pensés, qui peuvent résoudre même 30 lignes de code en une seule ligne 4. Exemples de code spécifiques de la première méthode#🎜 🎜#. 1. Importer les dépendances
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.1.6.RELEASE</version> </dependency>
2. A DTO (les objets de définition d'interface utilisent généralement DTO)
public class TestDemoDTO{ private String name; private Map<String,String> citys; private Date gmtStart; private Boolean flag; private Integer age; private List<String> types; public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, String> getCitys() { return citys; } public void setCitys(Map<String, String> citys) { this.citys = citys; } public Date getGmtStart() { return gmtStart; } public void setGmtStart(Date gmtStart) { this.gmtStart = gmtStart; } public Boolean getFlag() { return flag; } public void setFlag(Boolean flag) { this.flag = flag; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List<String> getTypes() { return types; } public void setTypes(List<String> types) { this.types = types; } @Override public String toString() { return "TestDemoDTO{" + "name='" + name + '\'' + ", citys=" + citys + ", gmtStart=" + gmtStart + ", flag=" + flag + ", age=" + age + ", types=" + types + '}'; } }
3 A From (définition des paramètres d'entrée front-end From )#🎜🎜. #
public class TestDemoFrom { private String name; private Map<String,String> citys; private Date gmtStart; private Boolean flag; private Integer age; private List<String> types; public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, String> getCitys() { return citys; } public void setCitys(Map<String, String> citys) { this.citys = citys; } public Date getGmtStart() { return gmtStart; } public void setGmtStart(Date gmtStart) { this.gmtStart = gmtStart; } public Boolean getFlag() { return flag; } public void setFlag(Boolean flag) { this.flag = flag; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List<String> getTypes() { return types; } public void setTypes(List<String> types) { this.types = types; } @Override public String toString() { return "TestDemoFrom{" + "name='" + name + '\'' + ", citys=" + citys + ", gmtStart=" + gmtStart + ", flag=" + flag + ", age=" + age + ", types=" + types + '}'; } }
public class TestDemo { public static void main(String[] args) { TestDemoFrom testDemoFrom = new TestDemoFrom(); HashMap<String, String> map = Maps.newHashMap(); map.put("001","北京"); map.put("002","上海"); map.put("003","广州"); testDemoFrom.setCitys(map); testDemoFrom.setFlag(true); testDemoFrom.setGmtStart(new Date()); testDemoFrom.setName("诺言"); testDemoFrom.setAge(18); testDemoFrom.setTypes(Lists.newArrayList("我爱","宝贝")); System.out.printf(testDemoFrom.toString()+"\n"); //下面就可以开始转化了,就一行代码 TestDemoDTO testDemoDTO = new TestDemoDTO(); BeanUtils.copyProperties(testDemoFrom,testDemoDTO); System.out.println(testDemoDTO.toString()); } }
TestDemoFrom{name='Promise', villes={001 =Pékin, 002 =Shanghai, 003=Guangzhou}, gmtStart=Vendredi 10 mai 22:37:53 CST 2019, flag=true, age=18, types=[J'aime, bébé]}
TestDemoDTO{name= 'Promesse', villes={001=Pékin, 002=Shanghai, 003=Guangzhou}, gmtStart=Vendredi 10 mai 22:37:53 CST 2019, flag=true, age=18, types=[J'aime, bébé]}
6. RemarqueSi les types sont différents et les noms sont les mêmes, ce sera pareil La valeur ne sera pas attribuée 5. Exemples de code spécifiques de la deuxième méthode (en utilisant dozer)Si les noms d'attribut sont différents, l'affectation ne sera pas possible
Faites attention à l'échec de l'affectation
1. dépendances
<dependency> <groupId>net.sf.dozer</groupId> <artifactId>dozer</artifactId> <version>5.4.0</version> </dependency>
public class TestDemoDozer {
@Test
public void test() {
DozerBeanMapper mapper = new DozerBeanMapper();
TestDemoFrom testDemoFrom = new TestDemoFrom();
HashMap<String, String> map = Maps.newHashMap();
map.put("001","北京");
map.put("002","上海");
map.put("003","广州");
testDemoFrom.setCitys(map);
testDemoFrom.setFlag(true);
testDemoFrom.setGmtStart(new Date());
testDemoFrom.setName("诺言");
testDemoFrom.setAge(18);
testDemoFrom.setTypes(Lists.newArrayList("我爱","宝贝"));
System.out.printf(testDemoFrom.toString()+"\n");
// 转换
TestDemoDTO convert = mapper.map(testDemoFrom,TestDemoDTO.class);
System.out.println(convert);
}
}
Copier après la connexion3 Résultat
public class TestDemoDozer { @Test public void test() { DozerBeanMapper mapper = new DozerBeanMapper(); TestDemoFrom testDemoFrom = new TestDemoFrom(); HashMap<String, String> map = Maps.newHashMap(); map.put("001","北京"); map.put("002","上海"); map.put("003","广州"); testDemoFrom.setCitys(map); testDemoFrom.setFlag(true); testDemoFrom.setGmtStart(new Date()); testDemoFrom.setName("诺言"); testDemoFrom.setAge(18); testDemoFrom.setTypes(Lists.newArrayList("我爱","宝贝")); System.out.printf(testDemoFrom.toString()+"\n"); // 转换 TestDemoDTO convert = mapper.map(testDemoFrom,TestDemoDTO.class); System.out.println(convert); } }
TestDemoFrom{name='Promise', villes={001. =Pékin, 002=Shanghai, 003=Guangzhou}, gmtStart= samedi 11 mai 00:30:02 CST 2019, flag=true, age=18, types=[J'aime, bébé]}
TestDemoDTO{name= 'Promesse', villes={001=Pékin, 002=Shanghai, 003=Guangzhou}, gmtStart=Samedi 11 mai 00:30:02 CST 2019, flag=true, age=18, types=[J'aime, bébé]}Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
