Javabean
首先,一个java bean 其实就是一个普通的java 类, 但我们对这个类有些要求:
1. 这个类需要是public 的, 然后需要有个无参数的构造函数
2. 这个类的属性应该是private 的, 通过setXXX()和getXXX()来访问
3. 这个类需要能支持“事件”, 例如addXXXXListener(XXXEvent e), 事件可以是Click事件,Keyboard事件等等, 当然咱们也支持自定义的事件。
4. 得提供一个所谓的自省/反射机制, 这样能在运行时查看java bean 的各种信息
5. 这个类应该是可以序列化的, 即可以把bean的状态保存的硬盘上, 以便以后来恢复。
6.Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。

Pojo
简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。区别与JavaBean, EntityBean 或者 SessionBean。POJO不担当任何特殊的角色,它不包含业务逻辑或持久逻辑等,也不实现任何特殊的Java框架的接口如,EJB,JDBC等等。

Po
基于java的分析:
PO由一组属性和属性的get和set方法组成。
在o/r映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
PO的属性是跟数据库表的字段一一对应的。PO对象需要实现序列化接口。
基于框架Hibernate的分析:
PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中,用于保存到数据库或者缓存。如果一个PO与Session对应的实体容器中分离(如Session关闭后的PO),那么此时,它又会变成一个VO。

========================

hibernate中po对象的三种状态
1.transient:瞬态或者自由态
未被持久化的VO,此时就是一个内存对象VO,由JVM管理生命周期。
2.persistent:持久化状态
已被持久化的PO,并且在Session生命周期内,此时映射数据库连接,由数据库管理生命周期。
3.detached:脱管状态或者游离状态
曾被持久化过,但现在和Session已经托管(detached)了,以VO的身份在运行。它还可以进入另一个Session,继续PO状态管理。
1. 当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于detached,(表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态。
2. 当把session关闭时,session缓存中的persistent的po对象也变成detached因关闭session而变成游离态的可以通过lock、save、update变成持久态持久态实例可以通过调用delete()变成脱管状态。通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用lock()或者replicate()进行持久化[1]

=======================

VO
VO(value object):用于前端展示使用(例如放置到JSP中解析或者给前端传递数据)

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

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

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

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

DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:
1. 一个DAO工厂类;
2. 一个DAO接口;
3. 一个实现DAO接口的具体类;
4. 数据传递对象(有些时候叫做值对象).
具体的DAO类包含了从特定的数据源访问数据的逻辑