概念:
PO是持久化对象
,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程
。
VO
是什么?它是值对象,准确地讲,它是业务对象
,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。
FormBean
又是什么?它只是HTML表单的封装
,是为了在控制层弱化request中存储数据的作用,将request的get方法转变为对象的存取值。
VO与PO的比较:
VO是业务对象 ,由业务逻辑使用,它存活的目的就是为数据提供一个生存的地方。
PO 则是数据对象的表现,它可以简化对象数据与物理数据的转换 。
VO由new关键字创建,由GC回收。
PO则是向数据库中添加新数据时创建,删除数据库中数据时删除,并且它只能存活在一个数据库连接中,断开连接即被销毁。
VO的属性根据当前的业务不同而不同。
PO的属性则是跟数据库表的字段一一对应。PO对象需要实现序列化接口。
PO与VO的关系:
首
先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们
的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层
的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用
hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。
VO与FormBean的关系:
其次,让我们看看FormBean和VO,如果简单地讲,我们是可以不需要FormBean的,它只是struts带来的一部分,而VO是无论如何不能舍
弃的。如果让FormBean直接到业务层(它本来应该生活在控制层),那么会带来什么?View和Model就出现了强耦合,如果想改一下view的表
示,整个业务逻辑都得改,恐怖的事情啊!
我的理解:
PO对物理数据封装,代管了数据库的操作
then
PO与VO之间的映射
then
VO是逻辑业务的数据
then
VO与FormBean的映射
then
FormBean面向view,封装了request
Hibernate中PO有三种状态:
1.未被持久化的VO,此时就是一个内存对象VO,由JVM管理生命周期。
2.已被持久化的PO,并且在Session生命周期内,此时映射数据库连接,由数据库管理生命周期。
3.曾被持久化过,但现在和Session已经托管(detached)了,以VO的身份在运行。它还可以进入另一个Session,继续PO状态管理。
需要注意的是, PO最好只在持久层使用,如果脱离持久层到处使用,会给Hibernate带来不小的PO对象维护开销。
分享到:
相关推荐
NULL 博文链接:https://haixiami200411.iteye.com/blog/736554
介绍如何使用动态formbean的例子
Struts1.2动态FormBean 加 验证功能 的一个例子
B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证 C 用户每次提交表单,都会产生一个新的FormBean实例 D 动态FormBean不能进行验证操作 答案:A 8.以下哪些不是...
Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的...4.5 动态Bean 见用DynaBean减除不必要的VO和FormBean
在struts2中已经不需要struts1中的formbean了。在struts1中每次提交表单的时候,表单中的属性值都...而这些对象都是vo的实现,如果使用hibernate,可以直接把struts2的vo和hibernate的po整合到一块,直接使用一个即可。
NULL 博文链接:https://zywang.iteye.com/blog/413003
FormBeanUtil.rar 从javaeye拷贝下来,为aiaiya下载
FormBean如下 public class FormBean { public static Object makeBean(HttpServletRequest request,Class<?> clazz){ Object result = null; try { result=clazz.newInstance(); Field [] fields ...
要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面...
----Struts 使用技巧---- 1 Struts validate 1.1 使用ActionForm的validate()验证 ...> 配置FormBean: 配置FormBean中的validate()方法,处理相关验证; > 配置Jsp:配置JSP中相关信息接受后台验证信息的处理结果;
在Struts中几种情况可以使标签初始就是选中的,Formbean里面该Property的值设为 1.on 、2.yes 、3.true 这三种情况都是可以实现默认选中的。 注:如果不选中,最好把Property的设置为””,因为在Action中得到...
>>> prefix=""// 指定填充当前 Action 关联 FormBean 时 ,要添加到请求参数名称的前缀,因此,如果请求参数名为 "username" 并且 prefix 属性被设置为 "search" , 则将对 FormBean 调用一个名为 ...
本篇文章主要介绍了SpringMVC中使用bean来接收form表单提交的参数时的注意点,具有很好的参考价值。下面跟着小编一起来看下吧
newxy是hibernate的替代者,是web快速开发...2.《web开发:通用持久类代替hibernate的持久类、通用动态formBean类代替struts的formBean类》http://dev.csdn.net/author/nlhlx/d4343e375a9d42e2b3402eaa549d225f.html
struts的源码分析,整个流程,ActionServlet开始创建formbean开始
javascript 表格行列动态添加,在formbean定义这个属性为String[]
使用struts2的验证模式,并在里面使用了formbean的模式。
北大青鸟S2阶段的项目PPT,内容包含怎么用Action,Form,FormBean,DispatcherAction。