Java中DAO/DTO/PO/VO/BO/QO/POJO
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的更多相关文章
- java中一些对象(po,vo,dao,pojo)等的解释
一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对 ...
- PO VO BO DTO POJO DAO(转)
2EE开发中大量的专业缩略语很是让人迷惑, 特别是对于刚毕业的新人来说更是摸不清头脑.若与公司大牛谈技术人家出口就是PO VO BO DTO POJO DAO 等,让新人们无比仰慕大牛. PO(bea ...
- JavaEE PO VO BO DTO POJO DAO 整理总结
佩服能将复杂难懂的技术,抽象成简单易懂事物的人. 厌恶将简单易懂的技术,添加一堆专业术语将别人弄的头晕目眩的人. PO VO BO DTO POJO DAO 总体一览: 1.DAO[data acce ...
- PO VO BO DTO POJO DAO之间的关系
J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了. PO:persistant ...
- java术语(PO/POJO/VO/BO/QO/DAO/DTO)
一.概念理解 这些概念用于描述对象的类型:由于java是面向对象的语言:程序的世界就是各个对象之间的"交互":在交互的工程中会存在多个层次,每个层次中所拥有(关注)的内容都是不 ...
- PO,VO,BO,DTO,POJO(POCO),DAO的区别(转载)
PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...
- PO,VO,BO,POJO,DAO的区别
基本概念 PO:persistant object (持久化对象),可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不 ...
- PO/VO/BO等对象模型
PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中与i ...
- Java中DAO的实现
J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离.实现 DAO 模式涉及比编写数据访问代码更多的内容.在本文 ...
随机推荐
- BFS POJ 3414 Pots
题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...
- MySQL的两种存储引擎storage engine特点和对比
MyISAM 优点:快速读取数据, 占用空间小 缺点:不支持事务,外键 (表级别锁) InnoDB 优点:支持事务,外键; 高性能(CPU效率高) 缺点: 慢,占空间 (行级别锁)
- JAVA使用Ldap操作AD域
项目上遇到的需要在集成 操作域用户的信息的功能,第一次接触ad域,因为不了解而且网上其他介绍不明确,比较费时,这里记录下. 说明: (1). 特别注意:Java操作查询域用户信息获取到的数据和域管理员 ...
- .Net实战之反射外卖计费
场景 叫外卖支付,可以有以下优惠: 1. 满30元减12 2. 是会员减配送费,比如5元 3. 优惠券 …. 问题? 如何在不改代码的情况下更灵活的去控制优惠的变化??? 有些代码与实际业务可能 ...
- 【转载】testlink 1.8.5 安装错误的解决方法
TestLink所需环境为PHP+MYSQL (支持MS SQL等),系统推荐使用PHP5.2,安装成功以后,如果运行时出错,主要两种错: [1].HP Warning: strtotime(): I ...
- 使用脚本快速线程转储及列出高cpu线程
jstack `ps -ef | grep java | grep bocai.jar | awk '{print $2}'` > cpu_high.logtop -b -n1 -Hp `ps ...
- SDK_组合框的使用
组合框的使用 组合框的创建:有三种风格,分别 Simaple,Dropdown(可输入), 下拉列表(不可输入) 可以通过可视化编程中下拉列表的 下拉箭头 设置列表的长度 如何向组合框控件中添加数据, ...
- 搭建linux环境:如何在vmware安装linux虚拟机??
本来不想再整一遍的,奈何分布式压测呀,呀呀呀呀呀呀 1.安装linux虚机 (1)在桌面上双击VMware Workstation图标后启动虚拟机,鼠标单击文件,选择新的虚拟机: (2)单击“next ...
- XML解析——Java中XML的四种解析方式(转载 by 龍清扬)
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...
- RabbitMQ系列(一)--消息中间件MQ如何去选择
MQ在项目中的应用很普遍,本人所在项目组使用的是ActiveMQ,但是后面介绍的RabbitMQ... 一.应用场景 1.异步处理 2.流量削峰.秒杀 3.日志处理,推荐kafka 4.应用解耦 二. ...