1 / 2
文档名称:

POJO与PO的概念及区别.doc

格式:doc   页数:2
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

POJO与PO的概念及区别.doc

上传人:xxj16588 2016/6/8 文件大小:0 KB

下载得到文件列表

POJO与PO的概念及区别.doc

文档介绍

文档介绍:POJO 与 PO 的概念及区别学术部张亚涛 POJO = pure old java object or plain ordinary java object or what ever. PO = persisent object 持久对象就是说在一些 Object/Relation Mapping 工具中, 能够做到维护数据库表记录的 persisent object 完全是一个符合 Java Bean 规范的纯 Java 对象,没有增加别的属性和方法。全都是这样子的: public class User { private long id; private St ring name; public void setId(long id) { = id;} public void setName(String name) { =name; } public long getId() { return id;} public String getName() { return name; }} 首先要区别持久对象和 POJO 。持久对象实际上必须对应数据库中的 entity , 所以和 POJ O 有所区别。比如说 POJO 是由 new 创建,由 GC 回收。但是持久对象是 insert 数据库创建, 由数据库 delete 删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库 Connection 之中, Connnection 关闭以后, 持久对象就不存在了,而 POJ O 只要不被 GC 回收,总是存在的。由于存在诸多差别,因此持久对象 PO(Persistent Object) 在代码上肯定和 POJO 不同,起码 PO 相对于 POJO 会增加一些用来管理数据库 entity 状态的属性和方法。而 ORM 追求的目标就是要 PO 在使用上尽量和 POJO 一致,对于程序员来说,他们可以把 PO 当做 POJO 来用,而感觉不到 PO 的存在。 JDO 的实现方法是这样的: 1、编写 POJO 2、编译 POJO 3、使用 JDO 的一个专门工具, 叫做 Enhancer , 一般是一个命令行程序, 手工运行, 或者在 ant 脚本里面运行,对 POJO 的 class 文件处理一下,把 POJ O 替换成同名的 PO 。4 、在运行期运行的实际上是 PO ,而不是 POJO 。该方法有点类似于 JSP , JSP 也是在编译期被转换成 Servlet 来运行的, 在运行期实际上运行的是 Servlet , 而不是 JSP 。 Hibernate 的实现方法比较先进: 1 、编写 POJO 2 、编译 POJO 3 、直接运行,在运行期,由 Hibernate 的 CGLIB 动态把 POJO 转换为 PO 。由此可以看出 Hibernate 是在运行期把 POJO 的字节码转换为 PO 的,而 JDO 是在编译期转换的。一般认为 JDO 的方式效率会稍高,毕竟是编译期转换嘛。但是 Hibernate 的作者 Gavin King 说 CGLIB 的效率非常之高,运行期的 PO 的字节码生成速度非常之快,效率损失几乎可以忽略不计。实际上运行期生成 PO 的好处非常大,这样对于