自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate ActionFormBean簡(jiǎn)介

開(kāi)發(fā) 后端
這里介紹Hibernate ActionFormBean是 Web層的數(shù)據(jù)表示,它和HTML頁(yè)面Form對(duì)應(yīng),只要Web頁(yè)面的操作流程發(fā)生改變,它就要相應(yīng)的進(jìn)行修改。

Hibernate還是比較常用的,于是我研究了一下Hibernate ActionFormBean,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。

在struts+Hibernate這種結(jié)構(gòu)中,是不應(yīng)該把Hibernate產(chǎn)生的PO直接傳遞給JSP的,不管他是Iterator,還是List,這是一個(gè)設(shè)計(jì)錯(cuò)誤。

我來(lái)談?wù)勗贘2EE架構(gòu)中各層的數(shù)據(jù)表示方法:Web層的數(shù)據(jù)表示是FormBean,數(shù)據(jù)來(lái)源于HTML Form POST業(yè)務(wù)層的數(shù)據(jù)表示是VO持久層的數(shù)據(jù)表示是PO,其數(shù)據(jù)來(lái)源于數(shù)據(jù)庫(kù),持久層的數(shù)據(jù)表示例如CMP在一個(gè)規(guī)范的J2EE架構(gòu)中,不同層的數(shù)據(jù)表示應(yīng)該被限制在層內(nèi),而不應(yīng)該擴(kuò)散到其它層,這樣可以降低層間的耦合性,提高J2EE架構(gòu)整體的可維護(hù)性和可擴(kuò)展性。比如說(shuō)Web層的邏輯進(jìn)行了修改,那么只需要修改FormBean的結(jié)構(gòu),而不需要觸動(dòng)業(yè)務(wù)層和持久層的代碼修改。同樣滴,當(dāng)數(shù)據(jù)庫(kù)表進(jìn)行了小的調(diào)整,那么也只需要修改持久層數(shù)據(jù)表示,而不需要觸動(dòng)業(yè)務(wù)層代碼和Web層代碼。

不過(guò)由于Hibernate的強(qiáng)大功能,例如動(dòng)態(tài)生成PO,PO的狀態(tài)管理可以脫離Session,使得在應(yīng)用了Hibernate的J2EE框架中,PO完全可以充當(dāng)VO,因此我們下面把PO和VO合并,統(tǒng)稱為PO.先來(lái)談?wù)凙ctionFormBean和持久層的PO之間的重大區(qū)別。

在簡(jiǎn)單的應(yīng)用中,Hibernate ActionFormBean和PO幾乎是沒(méi)有區(qū)別,所以很多人干脆就是用ActionFormBean來(lái)充當(dāng)PO,于是ActionFormBean從JSP頁(yè)面到Servlet控制層再到業(yè)務(wù)層,然后穿過(guò)持久層,最后一直映射到數(shù)據(jù)庫(kù)表。真是一竿子捅到了底!

但是在復(fù)雜的應(yīng)用中,ActionFormBean和PO是分離的,他們也不可能一樣。ActionFormBean是和網(wǎng)頁(yè)里面的Form表單一一對(duì)應(yīng)的,F(xiàn)orm里面有什么元素,Bean里面就有什么屬性。而PO和數(shù)據(jù)庫(kù)表對(duì)應(yīng),因此如果數(shù)據(jù)庫(kù)表不修改,那么PO也不會(huì)修改,如果頁(yè)面的流程和數(shù)據(jù)庫(kù)表字段對(duì)應(yīng)關(guān)系不一致,那么你又如何能夠使用ActionFormBean來(lái)取代PO呢?

比如說(shuō)吧,用戶注冊(cè)頁(yè)面要求注冊(cè)用戶的基本信息,因此HTML Form里面包含了基本信息屬性,于是你需要一個(gè)ActionFormBean來(lái)一一對(duì)應(yīng)(注意:是一一對(duì)應(yīng)),每個(gè)Bean屬性對(duì)應(yīng)一個(gè)文本框或者選擇框什么的。

而用戶這個(gè)持久對(duì)象呢?他的屬性和ActionFormBean有什么明顯不同呢?他會(huì)有一些ActionFormBean所沒(méi)有的集合屬性,比如說(shuō)用戶的權(quán)限屬性,用戶的組屬性,用戶的帖子等等。另外還有可能的是在ActionFormBean里面有3個(gè)屬性,分別是用戶的First Name, Middle Name, Last Name,而在我的User這個(gè)持久對(duì)象中就是一個(gè) Name 對(duì)象屬性。

假設(shè)我的注冊(cè)頁(yè)面原來(lái)只要你提供First Name,那么ActionFormBean就這一個(gè)屬性,后來(lái)我要你提供全名,你要改ActionFormBean,加兩個(gè)屬性。但是這個(gè)時(shí)候PO是不應(yīng)該修改滴,因?yàn)閿?shù)據(jù)庫(kù)沒(méi)有改。

那么在一個(gè)完整的J2EE系統(tǒng)中應(yīng)該如何進(jìn)行合理的設(shè)計(jì)呢?

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

Hibernate ActionFormBean是 Web層的數(shù)據(jù)表示,它和HTML頁(yè)面Form對(duì)應(yīng),只要Web頁(yè)面的操作流程發(fā)生改變,它就要相應(yīng)的進(jìn)行修改,它不應(yīng)該也不能被傳遞到業(yè)務(wù)層和持久層,否則一旦頁(yè)面修改,會(huì)一直牽連到業(yè)務(wù)層和持久層的大面積的代碼進(jìn)行修改,對(duì)于軟件的可維護(hù)性和可擴(kuò)展性而言,是一個(gè)災(zāi)難,Actiont就是他的邊界,到此為止!

Action(Web Control) ——> Business Bean ——> DAO ——> ORM ——>DB而PO則是業(yè)務(wù)層和持久層的數(shù)據(jù)表示,它在業(yè)務(wù)層和持久層之間進(jìn)行流動(dòng),他不應(yīng)該也不能被傳遞到Web層的View中去,而 ActionServlet就是他的邊界,到此為止!

【編輯推薦】

  1. 分析Hibernate插入操作
  2. 剖析Hibernate批量更新
  3. 全面講解Hibernate二級(jí)緩存
  4. 講述Hibernate核心接口
  5. 概括Hibernate批量處理
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-09-21 13:19:06

Hibernate s

2009-09-27 09:46:45

Hibernate會(huì)話

2009-09-29 17:00:08

Hibernate c

2009-06-30 14:08:00

Hibernate緩存

2009-06-02 17:18:10

hibernate框架簡(jiǎn)介

2009-09-24 08:48:54

Hibernate技術(shù)

2009-06-26 16:19:32

Hibernate實(shí)現(xiàn)

2009-06-12 14:40:38

Hibernate AHibernate接口

2012-02-08 14:24:35

HibernateJava

2009-06-18 10:41:18

Hibernate3.Hibernate3.

2009-06-18 11:43:40

Hibernate uHibernate s

2009-06-02 14:46:26

Hibernate關(guān)系映射教程

2012-02-08 11:15:38

HibernateJava

2009-09-27 16:21:22

Hibernate C

2009-09-27 17:05:02

Hibernate p

2009-09-29 16:04:29

Hibernate S

2009-09-29 16:41:58

Hibernate S

2009-09-29 17:11:23

Hibernate T

2009-09-27 13:42:05

Hibernate E

2009-09-21 17:33:50

Hibernate基礎(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)