ORM:是Object Relational Mapping(对象关系映射)的缩写。

通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R/M的世界里,有两个基本的也是重要的东东需要了解,即 VO , PO 。

PO:(Persistant Object ),持久对象

可以看成是与数据库中的表相映射的Java对象。使用Hibernate来生成PO是不错的选择。它们是由一组属性和属性的get和set方法组成。

最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。 PO中应该不包含任何对数据库的操作。

VO:(Value Object) ,值对象

通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。

PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。

VO与PO区别:

  • VO是用new关键字创建,由GC回收的。
  • PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。
  • VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。
  • PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。
  • VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
  • PO的属性是跟数据库表的字段一一对应的。
  • PO对象需要实现序列化接口。

DAO:(Data Access Objects) ,数据访问对象接口

DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

JavaEE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开。实现DAO模式能够更加专注于编写数据访问代码。

DAO模式是标准的JavaEE设计模式之一。开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开。一个典型的DAO实现有下列几个组件:

  • 一个DAO工厂类。
  • 一个DAO接口。
  • 一个实现DAO接口的具体类。
  • 数据传递对象(有些时候叫做值对象)。

具体的DAO类包含了从特定的数据源访问数据的逻辑。

通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法 , 结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的CRUD操作。

BO:(Business Object),业务对象层

表示应用程序领域内“事物”的所有实体类。这些实体类驻留在服务器上,并利用服务类来协助完成它们的职责。

封装业务逻辑的Java对象 , 通过调用DAO方法 , 结合PO、VO进行业务操作。

主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

比如一个简历,有教育经历、工作经历、社会关系等等。 可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个 PO 。 建立一个对应简历的BO对象处理简历,每个BO包含这些PO 。 这样处理业务逻辑时,就可以针对BO去处理。

POJO(POJOs):(Plain Old Java Objects),简单的Java对象

实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接。

其中有一些属性及其getter、setter方法的类,有时可以作为Value Object或DTO(Data Transform Object)来使用。当然,如果有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有Connection之类的方法。

TO:(Transfer Object),数据传输对象 

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

QO:(Query Object),查询对象 

DTO:(Data Transfer Object),数据传输对象 

主要用于远程调用等需要大量传输对象的地方。

比如一张表有100个字段,那么对应的PO就有100个属性。但是界面上只要显示10个字段,客户端用Web Service来获取数据,没有必要把整个PO对象传递到客户端,这时就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。

其它:

model:一般都是JavaBean对象,例如与数据库的某个表相关联。

service:供外部调用,等于对dao,model等进行了包装。

impl:定义的接口实现。

util:通常都是工具类,如字符串处理、日期处理等。

dal:数据访问层。

idal:数据访问接口层。

dalfactory:数据访问层工厂。

bll:业务逻辑层。

BOF:Business Object Framework,业务对象框架

SOA:Service Orient Architecture,面向服务的设计

EMF:Eclipse Model Framework,Eclipse建模框架

参考:

http://www.cnblogs.com/bluestorm/archive/2012/09/26/2703234.html

http://www.cnblogs.com/dzcWeb/p/7060734.html

Java中DAO/DTO/PO/VO/BO/QO/POJO的更多相关文章

  1. java中一些对象(po,vo,dao,pojo)等的解释

     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对 ...

  2. PO VO BO DTO POJO DAO(转)

    2EE开发中大量的专业缩略语很是让人迷惑, 特别是对于刚毕业的新人来说更是摸不清头脑.若与公司大牛谈技术人家出口就是PO VO BO DTO POJO DAO 等,让新人们无比仰慕大牛. PO(bea ...

  3. JavaEE PO VO BO DTO POJO DAO 整理总结

    佩服能将复杂难懂的技术,抽象成简单易懂事物的人. 厌恶将简单易懂的技术,添加一堆专业术语将别人弄的头晕目眩的人. PO VO BO DTO POJO DAO 总体一览: 1.DAO[data acce ...

  4. PO VO BO DTO POJO DAO之间的关系

    J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了. PO:persistant ...

  5. java术语(PO/POJO/VO/BO/QO/DAO/DTO)

    一.概念理解 ​ 这些概念用于描述对象的类型:由于java是面向对象的语言:程序的世界就是各个对象之间的"交互":在交互的工程中会存在多个层次,每个层次中所拥有(关注)的内容都是不 ...

  6. PO,VO,BO,DTO,POJO(POCO),DAO的区别(转载)

    PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...

  7. PO,VO,BO,POJO,DAO的区别

    基本概念 PO:persistant object (持久化对象),可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不 ...

  8. PO/VO/BO等对象模型

    PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中与i ...

  9. Java中DAO的实现

    J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离.实现 DAO 模式涉及比编写数据访问代码更多的内容.在本文 ...

随机推荐

  1. H - Where is the Marble?(set+vector)

    Description Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers wr ...

  2. 各种轮播实现(纯css实现+js实现)

    1.纯Css实现轮播效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  3. 关于dbms_output包的使用

    General Source {ORACLE_HOME}/rdbms/admin/dbmsotpt.sql First Available 7.3.4 Data Types TYPE chararr ...

  4. 273 Integer to English Words 整数转换英文表示

    将非负整数转换为其对应的英文表示,给定的输入是保证小于 231 - 1 的.示例:123 -> "One Hundred Twenty Three"12345 -> & ...

  5. PHP安装yaf在ubuntu下面的问题解决

    1.在执行make的时候出现如下错误: In file included from /root/yaf-2.1.2/yaf_router.c:28: /usr/include/php/ext/pcre ...

  6. Unity笔记(3)自学第二天

    学习记录: 界面使用: 脚本使用: 脚本注意点:

  7. MySql 1248 - Every derived table must have its own alias

    执行一个sql语句,报错:1248 - Every derived table must have its own alias 提示说每一个衍生出来的表,必须要有自己的别名 执行子查询的时候,外层查询 ...

  8. selenium学习第三天,新建一个测试用例(运行失败)。

    今天的意外收获,在找SELENIUM实例的时候,发现一个JS实例,功能各类非常全演示及代码都有,谢谢大神的分享:http://www.miniui.com/demo/#src=datagrid/pag ...

  9. 处理sql锁死问题

    --SQL Server死锁的查询方法:   exec master.dbo.p_lockinfo 0,0; ---显示死锁的进程,不显示正常的进程   exec master.dbo.p_locki ...

  10. 数据库–Cobar分布式数据库集群MySQL中间件

    运行环境: 主机1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400)  内网IP地址:192.168.137.8 NODE1:Ubuntu 13.04 ...