91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中VO和DTO之間的轉換怎么實現

發布時間:2022-05-16 09:40:12 來源:億速云 閱讀:612 作者:iii 欄目:開發技術

今天小編給大家分享一下java中VO和DTO之間的轉換怎么實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    一、背景

    1.領域模型中的實體類分為四種類型:VO、DTO、DO、PO

    二、詳細講解

    1.VO(View Object),視圖對象,用于展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。

    2.DTO(Data Transfer Object),數據傳輸對象,這個概念來源于J2EE的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用于展示層與服務層之間的數據傳輸對象。

    3.DO(Domain Object),領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。

    4.PO(PersistentObject),持久化對象,它跟持久層(通常是關系型數據庫)的數據結構形成一一對應的映射關系,如果持久層是關系型數據庫,那么,數據表中的每個字段(或若干個)就對應PO的一個(或若干個)屬性。

    5.舉例:

    后端返回個前端的對象,可以 ***VO.java

    mybatis生成的dao表實體對象,可以 ****PO.java

    一般是 PO 轉換 DO 然后 轉換 DTO提供服務供外部調用

    注意

    PO一般自動生成和表字段一一映射

    DO一般和DO很多字段是一樣帶,但很多如類型字段是枚舉,有的項目中DO是Model結尾的類

    DTO如webservice接口(提供外部服務的),返回結果對象都是DTO,里面屬性的定義比較講究,易懂安全好擴展,DTO與DTO之間關系是包含還是平級,設計的時候一定要定義清楚,不然后期就是個坑

    VO比較簡單,前端展示需要什么就怎么定義

    三、實體對象間的轉換

    一個規范的項目

    代碼中充滿了VO、From、DTO、DO等等pojo類,這些類作用不一樣但類里面的屬性值往往一模一樣,當屬性非常多時,一個個set的確非常累人又耗時間,其實強大的Spring早為我們準備好了貼心工具,一行搞定以前甚至30行的代碼量

    四、第一種方法的具體代碼例子

    1.導入依賴

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

    2.一個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='" + name + '\'' +
                    ", citys=" + citys +
                    ", gmtStart=" + gmtStart +
                    ", flag=" + flag +
                    ", age=" + age +
                    ", types=" + types +
                    '}';
        }
    }

    3.一個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='" + name + '\'' +
                    ", citys=" + citys +
                    ", gmtStart=" + gmtStart +
                    ", flag=" + flag +
                    ", age=" + age +
                    ", types=" + types +
                    '}';
        }
    }

    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='諾言', citys={001=北京, 002=上海, 003=廣州}, gmtStart=Fri May 10 22:37:53 CST 2019, flag=true, age=18, types=[我愛, 寶貝]}
    TestDemoDTO{name='諾言', citys={001=北京, 002=上海, 003=廣州}, gmtStart=Fri May 10 22:37:53 CST 2019, flag=true, age=18, types=[我愛, 寶貝]}

    6.注意

    注意賦值失敗情況
    如果屬性名稱不同就會賦值不了
    如果類型不同,名稱相同也是會賦值不了

    五、第二種方法的具體代碼例子(使用dozer)

    1.導入依賴

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

    2.測試類

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

    3.結果

     TestDemoFrom{name='諾言', citys={001=北京, 002=上海, 003=廣州}, gmtStart=Sat May 11 00:30:02 CST 2019, flag=true, age=18, types=[我愛, 寶貝]}
    TestDemoDTO{name='諾言', citys={001=北京, 002=上海, 003=廣州}, gmtStart=Sat May 11 00:30:02 CST 2019, flag=true, age=18, types=[我愛, 寶貝]}

    以上就是“java中VO和DTO之間的轉換怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    安庆市| 保康县| 昌宁县| 金堂县| 杭锦旗| 海伦市| 黔东| 宣汉县| 十堰市| 嵊泗县| 高台县| 克拉玛依市| 平乐县| 衡山县| 汉沽区| 永德县| 化隆| 兴海县| 安乡县| 昌江| 延寿县| 蒲城县| 科尔| 宁德市| 宁乡县| 贵州省| 广河县| 塘沽区| 双辽市| 泰州市| 和顺县| 宁河县| 荔波县| 仁化县| 朝阳区| 景东| 县级市| 大方县| 海城市| 威宁| 义马市|