独码天涯

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

pojo直接描述数据库中的表和字段,一一对应

vo的话,可以多添加些属性,比如code对应的name,或者标识符等等

查询列表的时候也可以直接用vo,但是修改或添加记录必须是pojo

QueryVo 包含其它pojo,pojo是包装对象

 

vo与po的区别:
1.VO是用new关键字创建,由GC回收的。
   PO是向数据库中添加新数据时创建,删除数据库中数据时删除的。
   并且它只能存活在一个数据库连接中,当连接断开时,将被销毁。
2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务
   逻辑使用的,它存活的目的就是为数据提供一个生存的地方。
   PO是有状态的,每个属性代表其当前的状态。它是物理数据的对象
   表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化
   对象数据与物理数据之间的转换。
3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个
   属性都一一对应当前业务逻辑所需要的数据的名称。
   PO的属性是跟数据库表的字段一一对应的。
4.VO是独立的Java Object。
  PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了
  与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时
  将反应到实际数据库中。

不用po代替vo的主要原因还有
    业务层的方法的参数和返回类型不能是POJO,因为当POJO处于持久化状态时,会同步更新数据库,会带来一定的危险性,即在用户不知觉的情况下会对数据进行修改,所以,不能在控制器中对POJO进行操作,而用VO代替。使用VO可以避免Session已关闭的异常。

posted on 2018-11-07 22:27  独码天涯  阅读(227)  评论(0)    收藏  举报