java项目中VO和DTO以及Entity,各自是在啥情况下应用的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java项目中VO和DTO以及Entity,各自是在啥情况下应用的相关的知识,希望对你有一定的参考价值。

就是在项目环境下,这三者的应用场景是什么?最好可以举个例子,方便理解!!

你好,按照标准来说:

1、entity里的每一个字段,与数据库相对应,

2、dto里的每一个字段,是和你前台页面相对应,

3、VO,这是用来转换从entity到dto,或者从dto到entity的中间的东西。

举个例子:


你的html页面上有三个字段,name,pass,age

你的数据库表里,有两个字段,name,pass(注意没有age哦)

而你的dto里,就应该有下面三个(因为对应html页面上三个字段嘛)

private string name;

private string pass; 

private string age;

这个时候,你的entity里,就应该有两个(因为对应数据库表中的2个字段嘛)

private string name;

private string pass;

到了这里,好了,业务经理让你做这样一个业务“年龄大于20的才能存入数据库”

这个时候,你就要用到vo了

你要先从页面上拿到dto,然后判断dto中的age是不是大于20,如果大于20,就把dto中的

name和pass拿出来,放到vo中,然后在把vo中的name和pass原封不懂的给entity,然后根据

entity的值,在传入数据库,这就是他们三个的区别


PS,VO和entity里面的字段应该是一样的,vo只是entity到dto,或者dto到entity的中间过程,如果没有这个过程,你仍然可以做到增删改查,这个就根据具体公司来的,纯手打,望采纳

参考技术A

通常这三个破东西很迷惑新人,因为我们眨眼一看三个东西竟然一样...好吧,废话少说

按照标准来说:

entity里的每一个字段,与数据库相对应,这是绝大多数公司采用的叫法

dto里的每一个字段,是和你前台页面相对应,主要表示前端->后端,其中t表示transport,是传输的意思,dto就是传输对象,它可以用来表示前端传递给后端的对象,也可以表示服务与服务(后台与后台)之间的对象,有些公司把dto也叫做form,也有叫pojo,还有叫po的,

vo里的每个字段,也是和你前台页面相对应的,主要表示后端->前端(注意与DTO区别),其中vo中的v表示view,视图的意思,如果你了解spring mvc的ModelAndView,那么vo层应该很好理解

接下来我举一个例子

-------------------------下面你读懂了,就一下明白了-------------------

你的html页面上有三个字段,name,pass,age

你的数据库表里,有两个字段,name,pass(注意没有age)

而你的dto里,就应该有下面三个(因为对应html页面上三个字段)

private string name;

private string pass; 

private string age;

这个时候,你的entity里,就应该有两个(因为对应数据库表中的2个字段)

private string name;

private string pass;

到了这里,好了,业务经理让你做这样一个业务“年龄大于20的用户才能存入数据库,否则不让,入库成功之后,需要跳转到用户列表页面(比方说是个分页查询页面),用户分页列表页面只显示name”

这个时候,你就要用到vo了,vo只有一个字段,所以你会返回一个List的列表,List里装的VO

private string name;


VO,DTO,ENTITY只是为了软件分层,如果你不分层,也完全可以做到程序完美运行,甚至可以抬杠的说,内存开销反而更小,但是分层是有巨大好处的,尤其是在架构上,比方说

    可以对所有的DTO进行一个拦截,然后进行同意的数据校验,而不用在每个接口(比方说Spring MVC的controller)中判断

    可以对所有返回值进行封装,比方说如果返回值是vo结尾的类名,或者在你们公司xxx.vo包下,那么就可以对这个返回值都包装一层,多出code,status等字段,方便前端接受请求

具体这些东西叫vo,还是vvvvoooo,完全取决于你们公司,主要是理解分层这个概念就好了

追问

多表查询出来的数据,是用DTO保存吧。
我理解的是:entity跟数据库表字段一一对应;VO里可以放entity也可以放list包括List、list还有其他dto; DTO里可以放其他的dto,同样也可以放entity和list/list。当然VO和DTO都可以放字段属性。

本回答被提问者和网友采纳
参考技术B DTO
Data Transfer Object数据传输对象
应用场景:
主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

Entity 实体
实体bean ,一般是用于ORM 对象关系映射 ,一个实体映射成一张表,一般无业务逻辑代码。
如果是简单的java对象就是pojo,如果进行了持久化有了orm映射以后就是po。
po的作用简单的说就是将数据库中的表映射成java对象,就是属性对应数据库字段。

VO

主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。
比如在某页面上需要显示很多数据,但是一个po搞不定,这是你就可以自己定义Vo去处理了。

参考技术C 你抄别人的?是说那个被采纳的回答……

POJO,JAVABEAN,Entity,domain,DTO,ejb区别

在网上搜索过所有名词的定义后,我总结了下面这张表

应该把java中一些对象缩写都说明白了 

2018.04.21

 

 

诸多java对象缩写的定义和作用,区别与联系 
类型 定义 作用 其他
pojo (Plain Ordinary Java Object)简单的Java对象 普通JavaBeans,有时可以作为VO(value-object)或DTO(Data Transfer Object)来使用  
javabean 为写成JavaBean,类必须是具体和公共的,并且具有无参数的构造器。  简单的就是pojo,复杂的就是ejb  
ejb EJB(Enterprise JavaBean),定义用于开发基于组件的企业多重应用程序标准 java的核心代码,分别是回话Bean(Session Bean)、实体Bean(Entity Bean)、和消息驱动Bean(MessageDriven Bean)  
domain  domain是范围,界线,也被用来批一个变量的有效作用域  也常用这个词做一个包,然后在里面放些DAO类文件.   net.baidu.domain.AddUserDao  
dto 数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的对象 数据传输目标往往是数据访问对象从数据库中检索数据,从PO中取值进行传输  
entity 实体bean,一般是用于ORM对象关系映射 一个实体映射成一张表,一般无业务逻辑代码。  
po persistant object持久对象  最形象的理解就是一个PO就是数据库中的一条记录,如hibernate中的一个持久化对象  
vo ViewObject表现层对象  主要对应界面显示的数据对象。对于一个WEB页面,用一个VO对象对应整个界面的值。  
dao data access object数据访问对象 主要用来封装对数据库的访问,包含了各种数据库的操作方法。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO  
bo  business object业务对象  主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。  

 

BObusiness object业务对象

主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、  关系等等。
我们可以把教育经历对应一个PO,工作经历对应一个PO,  关系对应一个PO。
建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

 

DTO :Data Transfer Object数据传输对象,主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

 

 

  
  VO、PO、FormBean之间的区别:

VO是独立的Java Object;而PO是Hibernate纳入其实体容器(Entity Map)的对象。

PO代表了与数据库中某条记录相对应的Hibernata实体,PO的变化在事务提交时将反映到实际的数据库中。

FormBean只是HTML中表单的封装,是为了弱化request中存储数据的作用,将request对象的get()方法转化为对象的存取值。 
   
    VO和PO在结构上看,没什么区别。但从本质上看是完全不同的。 
   
  VO由new关键字创建,由GC回收。PO则是向数据库中添加新数据时创建,删除数据库中数据时删除,并且它只能存活在一个数据库连接中,断开连接即被销毁。 
   
  VO是业务对象,由业务逻辑使用,它存活的目的就是为数据提供一个生存的地方。PO则是数据对象的表现,它可以简化对象数据与物理数据的转换。 
   
  VO的属性根据当前的业务不同而不同。PO的属性则是跟数据库表的字段一一对应。PO对象需要实现序列化接口。 


  在Hibernate中,最核心的概念就是对PO的状态管理。一个PO有三种状态: 
  1.未被持久化的VO,此时就是一个内存对象VO,由JVM管理生命周期。 
  2.已被持久化的PO,并且在Session生命周期内,此时映射数据库连接,由数据库管理生命周期。 
  3.曾被持久化过,但现在和Session已经托管(detached)了,以VO的身份在运行。它还可以进入另一个Session,继续PO状态管理。 
   
  需要注意的是, PO最好只在持久层使用,如果脱离持久层到处使用,会给Hibernate带来不小的PO对象维护开销。























以上是关于java项目中VO和DTO以及Entity,各自是在啥情况下应用的的主要内容,如果未能解决你的问题,请参考以下文章

Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

Java中几种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)

VO DTO Entity Condition 之间的关系及应用场景

快速理解 POJO,VO,DO,DTO,Entity