>  기사  >  Java  >  Java에서 VO와 DTO 간의 변환을 구현하는 방법

Java에서 VO와 DTO 간의 변환을 구현하는 방법

PHPz
PHPz앞으로
2023-05-05 17:37:072586검색

    1. 배경

    1. 도메인 모델의 엔터티 클래스는 VO, DTO, DO, PO 4가지로 구분됩니다.

    2. 자세한 설명

    1. 프리젠테이션 레이어에 사용되는 이 기능은 지정된 페이지(또는 구성 요소)의 모든 데이터를 캡슐화하는 것입니다.

    2.DTO(Data Transfer Object), 이 개념은 J2EE의 디자인 패턴에서 유래합니다. 원래 목적은 EJB 분산 애플리케이션에 대해 대략적인 데이터 엔터티를 제공하여 분산 호출 수를 줄여 분산 애플리케이션의 성능을 향상시키는 것입니다. 호출하고 네트워크 부하를 줄이지만 여기서는 일반적으로 프레젠테이션 계층과 서비스 계층 간의 데이터 전송 개체를 참조합니다.

    3.DO(Domain Object)는 도메인 객체로 현실 세계에서 추상화된 유무형의 사업체입니다.

    4.PO(PerciousObject), 지속성 계층(일반적으로 관계형 데이터베이스)의 데이터 구조와 일대일 매핑 관계를 형성하는 지속성 개체입니다. 지속성 계층이 관계형 데이터베이스인 경우 데이터 테이블 필드(또는 여러 개)는 PO의 하나(또는 여러 개) 속성에 해당합니다.

    5. 예:

    백엔드는 프런트엔드 개체를 반환합니다. ***VO.java

    mybatis에서 생성한 dao 테이블 엔터티 개체는 가능합니다.***PO.java

    일반적으로 PO는 다음과 같습니다. DO로 변환한 후 변환된 DTO는 외부 호출에 대한 서비스를 제공합니다

    Note

    PO는 일반적으로 자동으로 생성되어 테이블 필드에 하나씩 매핑됩니다.

    DO는 일반적으로 DO와 동일한 필드를 가지지만 유형 필드 등 많은 것이 열거형입니다. 일부 프로젝트에서는 DO가 모델로 끝납니다.

    DTO 클래스는 웹 서비스 인터페이스(외부 서비스 제공)와 같습니다. 반환된 결과 객체는 모두 DTO입니다. 내부 속성의 정의는 매우 특별하고 이해하기 쉽고 안전합니다. 확장하기 쉽습니다. DTO와 DTO의 관계가 포괄적인지 병렬인지는 설계 중에 명확하게 정의해야 합니다. 그렇지 않으면 나중에 함정이 될 것입니다.

    VO는 비교적 간단합니다. 프런트엔드에 필요한 것만 정의하면 됩니다. display

    3. 엔터티 객체 간의 변환

    표준화된 프로젝트

    코드는 VO, From, DTO, DO로 가득 차 있으며 다른 pojo 클래스는 서로 다른 기능을 가지고 있지만 클래스의 속성 값은 종종 정확히 동일합니다. 속성이 많을 때 하나하나 설정하는 것은 실제로 매우 피곤하고 시간이 많이 걸립니다. 사실 강력한 Spring은 이미 우리를 위해 사려 깊은 도구를 준비했습니다. 이전 30줄의 코드를 제거하세요

    4. 첫 번째 방법의 코드 예시

    1. Import dependency

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.6.RELEASE</version>
    </dependency>

    2. A DTO(인터페이스 정의 객체는 일반적으로 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;;
        }
    }

    3. A From(프런트엔드 입력 매개변수 정의 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;;
        }
    }

    4.

    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());
        }
    }

    5. 결과

    TestDemoFrom{name='Promise', 도시={001=베이징, 002=상하이, 003=광저우}, gmtStart=금 5월 10일 22:37:53 CST, 플래그=true, age=18, 유형=[사랑해요, 자기]}
    TestDemoDTO{name='약속', 도시={001=베이징, 002=상하이, 003=광저우}, gmtStart=2019년 5월 10일 금요일 22:37:53 CST , flag=true, age=18, type=[사랑해요, 자기야]}

    6. 참고

    할당 실패에 주의하세요
    속성 이름이 다르면 값이 할당됩니다. 아니오
    유형이 다음과 같을 경우 다르고 이름이 동일하면 할당이 작동하지 않습니다

    5. 두 번째 방법의 특정 코드 예(dozer 사용)

    1. 종속성 가져오기

    <dependency>
      <groupId>net.sf.dozer</groupId>
      <artifactId>dozer</artifactId>
      <version>5.4.0</version>
    </dependency>

    2. 결과

    TestDemoFrom{name='약속', 도시={001=베이징, 002=상하이, 003=광저우}, gmtStart=토요일 5월 11일 00:30:02 CST 2019, 플래그=true, 나이=18, 유형=[사랑합니다 , baby]}
    TestDemoDTO{name='Promise', 도시={001=베이징, 002=상하이, 003=광저우}, gmtStart=토요일 5월 11일 00:30:02 CST 2019, 플래그=true, age=18, 유형=[사랑해요, 자기야]}


    위 내용은 Java에서 VO와 DTO 간의 변환을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제