Table des matières
1. Contexte
2. Explication détaillée
Note
2. A DTO (les objets de définition d'interface utilisent généralement DTO)
Maison Java javaDidacticiel Comment réaliser la conversion entre VO et DTO en Java

Comment réaliser la conversion entre VO et DTO en Java

May 05, 2023 pm 05:37 PM
java vo dto

    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 un

    DO 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 standard

    Le 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>
    Copier après la connexion

    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=&#39;" + name + &#39;\&#39;&#39; +
                    ", citys=" + citys +
                    ", gmtStart=" + gmtStart +
                    ", flag=" + flag +
                    ", age=" + age +
                    ", types=" + types +
                    &#39;}&#39;;
        }
    }
    Copier après la connexion

    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=&#39;" + name + &#39;\&#39;&#39; +
                    ", citys=" + citys +
                    ", gmtStart=" + gmtStart +
                    ", flag=" + flag +
                    ", age=" + age +
                    ", types=" + types +
                    &#39;}&#39;;
        }
    }
    Copier après la connexion

    4.Classe de test

    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());
        }
    }
    Copier après la connexion

    5.Result

    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. Remarque


    Faites attention à l'échec de l'affectation

    Si les noms d'attribut sont différents, l'affectation ne sera pas possible
    Si 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)


    1. dépendances

    <dependency>
      <groupId>net.sf.dozer</groupId>
      <artifactId>dozer</artifactId>
      <version>5.4.0</version>
    </dependency>
    Copier après la connexion

    2. Classe de test

    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 connexion
    3 Résultat

    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!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

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

    Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

    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.

    Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

    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.

    Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

    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.

    Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

    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.

    Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

    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.

    Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

    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

    Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

    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.

    Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

    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.

    See all articles