POJO详解
转自:http://blog.csdn.net/lushuaiyin/article/details/7436318
按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。
POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
二:为什么会有POJO?
主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。
三:POJO的意义
POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。
四:POJO与PO、VO的区别
POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
PO是指持久对象(persistant object持久对象)。
VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。
持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。
五:POJO的扩展
POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
但是在POJO的基础上,能够扩展出不同的对象。
为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
POJO还可以当作DTO使用。
javabean:
在Java程序或JSP程序中,其实有很多的代码段是可以重复使用的,比如对数据库的操作、用户的有效性检查及某些项特定功能的实现等。为了很好的解决这个问题,提高开发效率,Sun公司推出了JavaBean,简言之,JavaBean这是一个实现了某个功能且供重复使用的Java类。
在JSP中使用JavaBean后,可实现HTML与Java代码的分离,使JSP更易于开发和维护。因此JavaBean成了JSP程序员的必备利器之一。
虽然JavaBean是Java类,同时它也具有自己的一些特征:
1、 JavaBean是一个public的类
2、 JavaBean有一个不带参数的构造方法
3、 JavaBean中的属性通过getXXX()和setXXX()进行操作
按着Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于
javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:
1. 可以实现代码的重复利用
2. 易编写、易维护、易使用
3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。
比如我们编写一个计算圆面积的java类CircleArea.java 以后需要计算圆面积的地方直接调用就行了。
-----------------
来自百度对POJO的解释:
简单的Java对象(Plain Ordinary Java Objects)实际就是普通JavaBean,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
其它的解释:
POJO -Plain Old Java Objects ,即"普通的老旧的Java对象".
该名称的创立者之一Matin Flower是这样解释的: "对于人们经常忘记常规的Java对象,我的总结是它们没有一个好名字 - 因此在准备一次演讲时,Rebecca Parsons, Josh Mackenzie 和我给起了名字: POJO。"
POJO是不包含业务逻辑的透明组件,就像其命名那样,它的确简单,只用作单纯的DTO(Data Transport Object 数据传输对象)或是VO(Value Object 值对象).它通常的构成形式为一个包含私有变量作为属性以及访问其属性的getter和setter方法的类,根据需要可以为其添加constructor.对于初识POJO的人来说,它很像JavaBean,但按照其应与其他组件易组合的设计目的,它不应包含业务逻辑的处理,这也是与JavaBean不同的地方。
PO -Persistent Object ,即"持久化对象".
PO是位于EIMS层数据库中的实体,生命周期和数据库密切相关.在向数据库插入记录时创建该实体,删除或关闭数据库时该实体随之消亡.很多优秀的开源框架都实现了将数据库中的PO通过ORM用POJO来实际操作,如hibernate,JDO等。
最后我们总结一下:
1.VO/DTO 就是Value Object和Data Transform object就是作为数据使用的对象
2.POJO,是Plain Ordinary(Old)Java Object的缩写,是不包含业务逻辑的JavaBean,通常情况下可以作为VO/DTO来使用
3.PO,是Persistence Object的缩写,来自各种各个JPA ORM(Java Persistent API Object Relational Mapping)提供商比如Hibernate toplink等厂商,是跟数据库交互的时候存在的中间对象,而且可以有各种逻辑操作。
pojo与实体bean:
pojo 应用于页面数据的操作,是来保存数据的。(你也可以不这样做,但是这已经成了一种规范。)
实体bean与数据库表关联,是对数据表的操作。
其它:
POJO和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多,JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子 扳、锤、撬等等),而这个扳子就是一个组件。
先解释上面的意思:
pojo的格式是用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。
而javabean虽然数据的获取与pojo一样,但是javabean当中可以有其它的方法。
- 扩展预定的类,如 public class Foo extends javax.servlet.http.HttpServlet { ...
- 实现预定的接口,如 public class Bar implements javax.ejb.EntityBean { ...
- 包含预定的标注,如 @javax.ejb.Entity public class Baz{ ...
- 这个类必须有一个公共的缺省构造函数。
- 这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。
- 这个类应是可序列化的。
POJO详解的更多相关文章
- JavaBeans、EJB和POJO详解
转自:http://developer.51cto.com/art/200906/130814.htm J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种轻易理解的角 ...
- hibernate(七) hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...
- Java Class文件详解
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) Java Class文件中包含以下信息: [+]view code ClassFile { u4 magic; ...
- spring mvc 框架搭建及详解
现 在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不 ...
- SpringMVC学习总结(三)——Controller接口详解(2)
4.5.ServletForwardingController 将接收到的请求转发到一个命名的servlet,具体示例如下: package cn.javass.chapter4.web.servle ...
- 常见 jar包详解
常见 jar包详解 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期 ...
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...
- Hibernate配置文件详解
Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...
- hibernate集合映射inverse和cascade详解
hibernate集合映射inverse和cascade详解 1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...
随机推荐
- 批量mvn 打包 bat文件命令
@echo off cd /d "E:\project\Branches\Source\" svn up mvn clean install -Dmaven.test.skip=t ...
- spring boot +Thymeleaf+mybatis 集成通用PageHelper,做分页
controller: /** * 分页查询用户 * @param request * @param response * @return * @throws Exception */ @ ...
- Hibernate常见报错
1.A different object with the same identifier value was already associated with the session(使用Hibern ...
- 小a与黄金街道(欧拉函数+快速幂)
链接:https://ac.nowcoder.com/acm/contest/317/D 来源:牛客网 题目描述 小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们 ...
- eclipse.ini X64 Oxygen.2 Release (4.7.2) lombok
X64 Eclipse Java EE IDE for Web Developers. Version: Oxygen.2 Release (4.7.2)Build id: 20171218-0600 ...
- oracle中所有表的字段和注释
select t1.owner ,t1.table_name ,t1.column_id ,t1.column_name ,t1.data_type ,t2.comments from all_tab ...
- Redis:存储对象的两种方式(序列化和json字符串)
方式一:序列化操作 public class SerializeUtil { /* * 序列化 * */ public static byte[] serizlize(Object ...
- Silverlight 用户代码未处理 TypeLoadException
在Silverlight中动态创建Enum时,多次调用改方法出现上图所示错误,后来发现定义名称都是一样的, 在程序中声明全局变量去区别就可以了. int num = 1; private Type C ...
- Boxes in a Line UVA - 12657 (双向链表)
题目链接:https://vjudge.net/problem/UVA-12657 题目大意:输入n,m 代表有n个盒子 每个盒子最开始按1~n排成一行 m个操作, 1 x y :把盒子x放到y ...
- gRPC框架
https://blog.csdn.net/shuanger_/article/details/47281381 https://grpc.io/ gRPC是利用通讯协议是HTTP2,序列化用prot ...