pojo与DTO的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pojo与DTO的区别是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

POJO是一种概念或者接口,身份及作用随环境变化而变化,DTO是经过处理后的PO,可能增加或者减少PO的属性,一个POJO持久化以后就是PO。

一、具体含义:

    POJO(plainordinaryjavaobject):简单无规则java对象
    传统意义的java对象。就是说在一些Object/RelationMapping工具中,能够做到维护数据库表记录的persisentobject完全是一个符合JavaBean规范的纯Java对象,没有增加别的属性和方法,是最基本的JavaBean,只有属性字段及setter和getter方法。

    DAO(dataaccessobject):数据访问对象

    是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的CRUD操作。

二、相关概念:

    PO(persistantobject):持久对象
    在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

    VO(valueobject):值对象

    通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

    TO(TransferObject):数据传输对象

    在应用程序不同tie(关系)之间传输的对象

    BO(businessobject):业务对象

    从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。 

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对象维护开销。























以上是关于pojo与DTO的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

POJO(普通旧 Java 对象)和 DTO(数据传输对象)有啥区别?

DTO 和 POCO(或 POJO)有什么区别

POJO, DTO, VO, JavaBean的区别

pojo类和vo类分别是啥

JavaBean,POJO,VO,DTO的区别和联系