广告
返回顶部
首页 > 资讯 > 精选 >java中VO和DTO之间的转换怎么实现
  • 924
分享到

java中VO和DTO之间的转换怎么实现

2023-06-30 14:06:56 924人浏览 泡泡鱼
摘要

今天小编给大家分享一下java中VO和DTO之间的转换怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、背景领域模型

今天小编给大家分享一下java中VO和DTO之间的转换怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    一、背景

    领域模型中的实体类分为四种类型:VO、DTO、DO、PO

    二、详细讲解

    VO(View Object),视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

    DTO(Data Transfer Object),数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

    DO(Domain Object),领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

    PO(PersistentObject),持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

    举例:

    后端返回个前端的对象,可以 ***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行的代码量

    四、第一种方法的具体代码例子

    导入依赖

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

    一个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 +                '}';    }}

    一个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 +                '}';    }}

    测试

    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='诺言', 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=[我爱, 宝贝]}

    注意

    注意赋值失败情况
    如果属性名称不同就会赋值不了
    如果类型不同,名称相同也是会赋值不了

    五、第二种方法的具体代码例子(使用dozer)

    导入依赖

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

    结果

     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之间的转换怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: java中VO和DTO之间的转换怎么实现

    本文链接: https://www.lsjlt.com/news/329408.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • java中VO和DTO之间的转换怎么实现
      今天小编给大家分享一下java中VO和DTO之间的转换怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、背景领域模型...
      99+
      2023-06-30
    • java中VO和DTO之间的转换实现
      目录一、背景二、详细讲解注意三、实体对象间的转换四、第一种方法的具体代码例子五、第二种方法的具体代码例子(使用dozer)六、结束一、背景 1.领域模型中的实体类分为四种类型:VO、...
      99+
      2022-11-13
    • NodeJS和C++之间怎么实现类型转换
      这篇文章主要介绍“NodeJS和C++之间怎么实现类型转换”,在日常操作中,相信很多人在NodeJS和C++之间怎么实现类型转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”NodeJS和C++之间怎么实现类...
      99+
      2023-06-17
    • Java实体和JSON之间的相互转换
      Java实体和JSON之间的相互转换 一、先写一个测试用的Java实体二、将Java实体转化为Json1、基于com.alibaba.fastjson.JSON(1)、JSON.toJSONS...
      99+
      2023-09-10
      java json 开发语言
    • java实现Object和Map之间的转换3种方式
      利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的public static Object mapToObject(Map<String, Object> map, Class<...
      99+
      2023-05-31
      java map object
    • js怎么实现base64、url和blob之间相互转换
      这篇文章主要讲解了“js怎么实现base64、url和blob之间相互转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现base64、url和blob之间相互转换”吧!一般来说前...
      99+
      2023-07-06
    • PHP中日期时间和时间戳之间怎么转换
      这篇文章主要介绍“PHP中日期时间和时间戳之间怎么转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP中日期时间和时间戳之间怎么转换”文章能帮助大家解决问题。将日期时间转换为时间戳在 PHP 中...
      99+
      2023-07-05
    • Java实现二维数组和稀疏数组之间的转换
      目录前言 1. 需求和思路分析 2.代码实现和展示 3. 总结 参考视频前言 用Java实现二维数据和稀疏数组之间的转换 1. 需求和思路分析 1.1 以二维数组的格式模拟棋盘、...
      99+
      2022-11-12
    • Java中实现时间与时间戳的转换
      public static void main(String[] args) { // 格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ...
      99+
      2023-09-30
      java python 开发语言
    • 如何实现Flex3中AS2和AS3之间事件转换
      这篇文章主要介绍如何实现Flex3中AS2和AS3之间事件转换,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!事件的转换AS3的事件与AS2有很大的不同,形势更统一,功能更强大。1.监听事件的方式(Handlingth...
      99+
      2023-06-17
    • QT怎么实现二、八、十六进制之间的转换
      这篇文章主要讲解了“QT怎么实现二、八、十六进制之间的转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“QT怎么实现二、八、十六进制之间的转换”吧!主要使用QT中的三个方法。第一个是QStr...
      99+
      2023-06-30
    • Python 实现list,tuple,str和dict之间的相互转换
      1、字典(dict) dict = {‘name': ‘Zara', ‘age': 7, ‘class': ‘First'} 1.1 字典——字符串 返回: print t...
      99+
      2022-11-11
    • php怎么实现日期和时间戳的转换
      PHP是一种流行而强大的编程语言,拥有广泛的应用。其中,日期与时间戳(timestamp)的转换也是开发者们经常需要处理的问题。本文将介绍如何将PHP中的日期转换成时间戳,以及如何将时间戳转换成日期。将日期转换成时间戳在PHP中,我们可以通...
      99+
      2023-05-14
      php时间戳 php
    • Java怎么实现Unicode和中文相互转换
      在Java中,可以使用java.nio.charset.StandardCharsets类和java.lang.String类来实现...
      99+
      2023-10-18
      Java
    • 基于Android中dp和px之间进行转换的实现代码
      在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很...
      99+
      2022-06-06
      dp px Android
    • JavaScript怎么实现两个时间戳之间转换成日期数组
      这篇文章主要介绍了JavaScript怎么实现两个时间戳之间转换成日期数组的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript怎么实现两个时间戳之间转换成日期数组...
      99+
      2022-10-19
    • MyBatis实现 Java 对象和数据库中日期类型之间的转换(超详细)
      背景 数据库存储的时间字段的类型是datetime Java实体类的时间字段类型是Date 需求:响应前端的时间字段格式为”yyyy-MM-dd HH:mm:ss“ 步骤 1、定义resultMap ...
      99+
      2023-09-23
      mybatis java 数据库 spring database
    • C++怎么实现百度坐标及GCJ02与WGS84之间的转换
      这篇文章主要讲解了“C++怎么实现百度坐标及GCJ02与WGS84之间的转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么实现百度坐标及GCJ02与WGS84之间的转换”吧!实现代...
      99+
      2023-07-05
    • php怎么实现时间戳和年月日的转换
      PHP语言是一种非常流行的服务器端脚本语言,它能够快速地开发大规模的Web应用程序和网站。其中,时间戳是在Web开发中非常重要的一个概念,它是一个表示日期和时间的数字。在PHP中,我们可以通过一些函数来实现时间戳和年月日的转换。具体的实现方...
      99+
      2023-05-14
    • Python中列表,元组,字典和集合之间怎么转换
      本篇内容主要讲解“Python中列表,元组,字典和集合之间怎么转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中列表,元组,字典和集合之间怎么转换”吧!前排提示:元祖是错误的写法(...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作