這里本來應(yīng)該有張描述應(yīng)用程序結(jié)構(gòu)演變的圖,可是CSDN在這里上傳不了,所以沒有傳上來.
縱觀幾十年的計算機應(yīng)用軟件的演變過程,應(yīng)用程序逐漸由單層體系結(jié)構(gòu)發(fā)展為多層體系結(jié)構(gòu)。最初應(yīng)用軟件只是在大型機上的單層應(yīng)用程序,大都采用文件系統(tǒng)存儲數(shù)據(jù)。20世紀70年代,隨著數(shù)據(jù)庫的普及,原來的單層結(jié)構(gòu)發(fā)展為雙層結(jié)構(gòu)。在雙層結(jié)構(gòu)中,實現(xiàn)了數(shù)據(jù)存放與應(yīng)用程序的分離。但是,負責用戶界面交互的代碼與業(yè)務(wù)邏輯混雜在一起,一個小的系統(tǒng)尚可以維護但是對于企業(yè)級的應(yīng)用,長期的維護就是一件十分困難的事情。因此,三層的體系結(jié)構(gòu)應(yīng)運而生。在三層結(jié)構(gòu)中,把原來的應(yīng)用程序?qū)臃殖闪艘晥D層和業(yè)務(wù)邏輯層、數(shù)據(jù)庫層維持不變。隨著軟件行業(yè)的蓬勃發(fā)展,人們感覺這樣頻繁的操作數(shù)據(jù)庫和大量的底層代碼的重復書寫極大的浪費了程序人員的心血,Hibernate,Spring,等框架的應(yīng)運而生了。
在Hibernate中又將原來原業(yè)務(wù)邏輯層分成了業(yè)務(wù)邏輯層和持久層。(現(xiàn)在主流的分層結(jié)構(gòu)依然是三層結(jié)構(gòu)).
2.什么是持久化? 為什么要持久化?
本人找了好多文章都沒有找到滿意的答案,最后是從孫衛(wèi)琴寫的《精通Hibernate:Java對象持久化技術(shù)詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:
狹義的理解: “持久化”僅僅指把域?qū)ο笥谰帽4娴綌?shù)據(jù)庫中;廣義的理解,“持久化”包括和數(shù)據(jù)庫相關(guān)的各種操作。
● 保存:把域?qū)ο笥谰帽4娴綌?shù)據(jù)庫。
● 更新:更新數(shù)據(jù)庫中域?qū)ο蟮臓顟B(tài)。
● 刪除:從數(shù)據(jù)庫中刪除一個域?qū)ο蟆?/font>
● 加載:根據(jù)特定的OID,把一個域?qū)ο髲臄?shù)據(jù)庫加載到內(nèi)存。
● 查詢:根據(jù)特定的查詢條件,把符合查詢條件的一個或多個域?qū)ο髲臄?shù)據(jù)庫加載內(nèi)在存中。
持久化技術(shù)封裝了數(shù)據(jù)訪問細節(jié),為大部分業(yè)務(wù)邏輯提供面向?qū)ο蟮?span lang="EN-US">API。
● 通過持久化技術(shù)可以減少訪問數(shù)據(jù)庫數(shù)據(jù)次數(shù),增加應(yīng)用程序執(zhí)行速度;
● 代碼重用性高,能夠完成大部分數(shù)據(jù)庫操作;
● 松散耦合,使持久化不依賴于底層數(shù)據(jù)庫和上層業(yè)務(wù)邏輯實現(xiàn),更換數(shù)據(jù)庫時只需修改配置文件而不用修改代碼