vo和dto,对象转换,Java中的vo
一.背景二。详细说明注三。实体对象之间的转换。第一种方法的具体代码示例五、第二种方法的具体代码示例(使用推土机)六。目标
00-1010 1.领域模型中有四种类型的实体类:VO、DTO、DO和PO。
00-
目录
1.VO(视图对象),一个视图对象,用于显示层。它的功能是封装指定页面(或组件)的所有数据。
2.DTO(数据传输对象),这个概念来自J2EE的设计模式。最初的目的是为EJB的分布式应用提供粗粒度的数据实体,从而减少分布式调用的次数,从而提高分布式调用的性能,降低网络负载。但在这里,我一般指的是表示层和服务层之间使用的数据传输对象。
3.DO(域对象),域对象,是从现实世界中抽象出来的有形或无形的业务实体。
4.PO(PersistentObject),持久性对象,与持久层的数据结构(通常是关系数据库)形成一对一的映射关系。如果持久层是关系数据库,那么数据表中的每个字段(或几个字段)对应PO的一个(或几个)属性。
5.例如:
后端返回前端对象,可以是* * * vo.java。
mybatis生成的Dao表实体对象可以是* * ****PO.java
通常,PO转换DO,然后DTO为外部呼叫提供服务。
00-1010po一般自动生成,表格字段一一映射。
一般来说,DO和DO和很多字段的磁带是一样的,但是type等很多字段都是枚举,在某些项目中,DO是Model末尾的类。
o如webservice接口(提供外部服务),返回的结果对象都是dto,其中的属性定义精致、易懂、安全、易扩展。DTO和DTO的关系是包容还是平等,在设计的时候一定要界定清楚,否则后期就是个坑。
VO比较简单,可以定义前端显示需要什么。
00-1010标准化项目
代码中充满了VO、From、DTO、DO等pojo类。这些类有不同的功能,但是类中的属性值通常完全相同。当属性很多的时候,一个一个的设置,真的很累很费时间。其实强大的Spring已经为我们准备了贴心的工具,可以一行搞定之前的30行代码。
00-1010 1.导入依赖项
依赖groupIdorg.springframework/groupId工件Spring-Beans/工件ID version5.1.6.RELEASE/version/dependency2. a DTO(接口定义对象一般使用DTO)
公共类TestDemoDTO{私有字符串名称;private MapString,String citys私人日期gmtStart私有布尔标志;私有整数年龄;私有列表字符串类型;公共字符串getName(){ return name;} public void set name(String name){ this . name=name;} public MapString,String get citys(){ return citys;} public void setCitys(MapString,String citys){ this . citys=citys;} public Date getGmtStart(){ return gmtStart;} public void setGmtStart(Date gmtStart){ this . gmtStart=gmtStart;} public Boolean get flag(){ return flag;} public void set flag(Boolean flag){ this . flag=flag;}公共整数getAge() { return a
ge; } 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之间的转换实现的文章就介绍到这了,更多相关java VO和DTO转换 内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。