Hibernate ActionFormBean简介

开发 后端
这里介绍Hibernate ActionFormBean是 Web层的数据表示,它和HTML页面Form对应,只要Web页面的操作流程发生改变,它就要相应的进行修改。

Hibernate还是比较常用的,于是我研究了一下Hibernate ActionFormBean,在这里拿出来和大家分享一下,希望对大家有用。

在struts+Hibernate这种结构中,是不应该把Hibernate产生的PO直接传递给JSP的,不管他是Iterator,还是List,这是一个设计错误。

我来谈谈在J2EE架构中各层的数据表示方法:Web层的数据表示是FormBean,数据来源于HTML Form POST业务层的数据表示是VO持久层的数据表示是PO,其数据来源于数据库,持久层的数据表示例如CMP在一个规范的J2EE架构中,不同层的数据表示应该被限制在层内,而不应该扩散到其它层,这样可以降低层间的耦合性,提高J2EE架构整体的可维护性和可扩展性。比如说Web层的逻辑进行了修改,那么只需要修改FormBean的结构,而不需要触动业务层和持久层的代码修改。同样滴,当数据库表进行了小的调整,那么也只需要修改持久层数据表示,而不需要触动业务层代码和Web层代码。

不过由于Hibernate的强大功能,例如动态生成PO,PO的状态管理可以脱离Session,使得在应用了Hibernate的J2EE框架中,PO完全可以充当VO,因此我们下面把PO和VO合并,统称为PO.先来谈谈ActionFormBean和持久层的PO之间的重大区别。

在简单的应用中,Hibernate ActionFormBean和PO几乎是没有区别,所以很多人干脆就是用ActionFormBean来充当PO,于是ActionFormBean从JSP页面到Servlet控制层再到业务层,然后穿过持久层,最后一直映射到数据库表。真是一竿子捅到了底!

但是在复杂的应用中,ActionFormBean和PO是分离的,他们也不可能一样。ActionFormBean是和网页里面的Form表单一一对应的,Form里面有什么元素,Bean里面就有什么属性。而PO和数据库表对应,因此如果数据库表不修改,那么PO也不会修改,如果页面的流程和数据库表字段对应关系不一致,那么你又如何能够使用ActionFormBean来取代PO呢?

比如说吧,用户注册页面要求注册用户的基本信息,因此HTML Form里面包含了基本信息属性,于是你需要一个ActionFormBean来一一对应(注意:是一一对应),每个Bean属性对应一个文本框或者选择框什么的。

而用户这个持久对象呢?他的属性和ActionFormBean有什么明显不同呢?他会有一些ActionFormBean所没有的集合属性,比如说用户的权限属性,用户的组属性,用户的帖子等等。另外还有可能的是在ActionFormBean里面有3个属性,分别是用户的First Name, Middle Name, Last Name,而在我的User这个持久对象中就是一个 Name 对象属性。

假设我的注册页面原来只要你提供First Name,那么ActionFormBean就这一个属性,后来我要你提供全名,你要改ActionFormBean,加两个属性。但是这个时候PO是不应该修改滴,因为数据库没有改。

那么在一个完整的J2EE系统中应该如何进行合理的设计呢?

JSP(View) ——> ActionFormBean(Module) ——> Action(Control)

Hibernate ActionFormBean是 Web层的数据表示,它和HTML页面Form对应,只要Web页面的操作流程发生改变,它就要相应的进行修改,它不应该也不能被传递到业务层和持久层,否则一旦页面修改,会一直牵连到业务层和持久层的大面积的代码进行修改,对于软件的可维护性和可扩展性而言,是一个灾难,Actiont就是他的边界,到此为止!

Action(Web Control) ——> Business Bean ——> DAO ——> ORM ——>DB而PO则是业务层和持久层的数据表示,它在业务层和持久层之间进行流动,他不应该也不能被传递到Web层的View中去,而 ActionServlet就是他的边界,到此为止!

【编辑推荐】

  1. 分析Hibernate插入操作
  2. 剖析Hibernate批量更新
  3. 全面讲解Hibernate二级缓存
  4. 讲述Hibernate核心接口
  5. 概括Hibernate批量处理
责任编辑:佚名 来源: IT168
相关推荐

2009-09-27 09:46:45

Hibernate会话

2009-09-29 17:00:08

Hibernate c

2009-09-21 13:19:06

Hibernate s

2009-09-24 08:48:54

Hibernate技术

2009-06-02 17:18:10

hibernate框架简介

2009-06-30 14:08:00

Hibernate缓存

2009-06-12 14:40:38

Hibernate AHibernate接口

2009-06-26 16:19:32

Hibernate实现

2012-02-08 14:24:35

HibernateJava

2009-06-18 11:43:40

Hibernate uHibernate s

2009-06-18 10:41:18

Hibernate3.Hibernate3.

2009-06-02 14:46:26

Hibernate关系映射教程

2009-09-25 15:05:39

Hibernate事件

2009-09-28 15:47:59

Hibernate O

2009-09-23 17:05:52

Hibernate S

2009-06-29 08:48:41

Hibernate缓存

2009-09-23 16:39:51

Hibernate s

2009-09-23 17:07:31

Hibernate C

2009-09-27 16:51:40

Hibernate U

2009-09-21 13:05:18

Hibernate u
点赞
收藏

51CTO技术栈公众号