javabean分类

  • Post author:
  • Post category:java


JavaBean,只是在MVC模式中部同层次的叫法不一样。
1...vo类。 Vo (Value Object)值对象。用于存放数据的操作。
2...pojo类。 POJO(Plain Old Java Objects)是简单java对象,他并不继承任何类(继承Object),实现任何接口,只有属性跟get set方法。
          简单无规则的java对象。
3...PO(Persisent Object)持久化对象 。po一般要实现序列化接口,有时也继承一些类。存到数据库里。。数据库里的数据


po是在持久层所使用的 用来封装原始数据 而VO则主要在视图层活动 两个JAVABEAN的使用范围不同 假如你从数据库取出来的原始数据 你可以通过业务层将数据进行封装 再通过VO发到页面上去
---------------------------------------------------------------------------------------------
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 String name;
  public void setId(long id) {
this.id = id;

public void setName(String name) {
this.name=name;
}
public long getId() {
return id;

public String getName() {
return name;
}


--------------------------------------------------------------------------------

首先要区别持久对象和POJO。

持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被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文件处理一下,把POJO替换成同名的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的好处非常大,这样对于程序员来说,是无法接触到PO的,PO对他们来说完全透明。可以更加自由的以POJO的概念操纵PO。另外由于是运行期生成PO,所以可以支持增量编译,增量调试。而JDO则无法做到这一点。实际上已经有很多人在抱怨JDO的编译期Enhancer问题了,而据说JBossDO将采用运行期生成PO字节码,而不采用编译期生成PO字节码。

另外一个相关的问题是,不同的JDO产品的Enhancer生成的PO字节码可能会有所不同,可能会影响在JDO产品之间的可移植性,这一点有点类似EJB的可移植性难题。

转载于:https://www.cnblogs.com/keia/archive/2013/05/16/3082486.html