幾個月前項目中用過hibernate。但是突擊式的學(xué)習(xí)過程。現(xiàn)在回想起來,還真是沒能留下什么痕跡。
今天開始,我將會在空閑時間寫下對Hibernate的一些認(rèn)識。就當(dāng)是一個 "認(rèn)知" 的過程
Web應(yīng)用框架(Jakarta Struts 對 WebWork),GUI組件框架(Swing 對 SWT),或模版工具(JSP 對
Velocity)。每一種相互競爭的解決方案都有其優(yōu)缺點,但它們至少都共享了相同的范圍與總體的方法。
不幸的是,這還不是持續(xù)性技術(shù)的情形,對持續(xù)性技術(shù)相同的問題有許多不同的混亂的解決方案。
前面這段話,意味深長。這是對"持續(xù)性技術(shù)"現(xiàn)狀的一個概括。
本著這種現(xiàn)狀去學(xué)習(xí)和研究"持續(xù)性技術(shù)",把現(xiàn)今熟悉的"持續(xù)性技術(shù)"進(jìn)行對比式的學(xué)習(xí)。尋求框架
的處理思路。分析他們的優(yōu)點,缺點...
先思考幾個問題
1)數(shù)據(jù)持久到底有那些成熟的方式?
■ 直接使用SQL和JDBC進(jìn)行工作 也可以結(jié)合DAO模式
■ 序列化持續(xù)性機(jī)制 他提供了將對象圖(應(yīng)用狀態(tài))寫到字節(jié)流中的能力,然后它可能被持續(xù)化到文件或數(shù)據(jù)庫中。
他也被Java的遠(yuǎn)程方法調(diào)用(RMI)使用來為復(fù)雜對象傳遞值語義。他的另一種用法是在機(jī)器集群中跨節(jié)點復(fù)制應(yīng)
用狀態(tài)。
■ EJB實體Bean
■ JDO
■ ORM 對象-關(guān)系映射:中間的短線強調(diào)了當(dāng)這兩個領(lǐng)域相碰撞時出現(xiàn)的不匹配問題
■ XML持續(xù)層 XML持續(xù)層是序列化模式的變種。
■ 存儲過程
2)ORM解決方案有那些組成部分?
■ 在持續(xù)類的對象上執(zhí)行基本的CRUD操作的一組API。
■ 用于指定查詢的一種語言或一組API,這些查詢會引用類和類屬性。
■ 用于指定映射元數(shù)據(jù)的工具。
■ 實現(xiàn)ORM的一項技術(shù),用來與事務(wù)對象交互以完成臟檢查、懶關(guān)聯(lián)存取和其它優(yōu)化功能。
3)實現(xiàn)ORM的有那些不同的方式?
■ 純關(guān)系
■ 輕量對象映射
■ 中等對象映射
■ 完全對象映射
4)相關(guān)的ORM有那些問題?
■ 持續(xù)類像什么?它們是細(xì)粒度的JavaBean嗎?或者它們是一些類似于EJB的組件模型的實例嗎?持續(xù)性工具有多么
透明?我們需要為業(yè)務(wù)領(lǐng)域的類采用一種編程模型或一些規(guī)范嗎?
■ 映射元數(shù)據(jù)是如何定義的?因為對象-關(guān)系轉(zhuǎn)換完全由元數(shù)據(jù)控制,這些元數(shù)據(jù)的格式和定義是重要的核心問題。
ORM工具應(yīng)該提供一個圖形化處理元數(shù)據(jù)的GUI嗎?或者有定義元數(shù)據(jù)的更好的方法嗎?
■ 我們應(yīng)該映射類的繼承層次嗎?這有幾種標(biāo)準(zhǔn)策略。多態(tài)關(guān)聯(lián)、抽象類和接口怎么映射呢?
■ 對象同一性和相等性如何關(guān)聯(lián)到數(shù)據(jù)庫同一性(主鍵)?我們?nèi)绾螌⑻囟惖膶嵗成涞教囟ū淼男小?BR> ■ 在運行時持續(xù)性邏輯如何與業(yè)務(wù)域?qū)ο蠼换ィ窟@是一個普通的編程問題,有許多的解決方案包括源代碼生成、運行時
反射、運行時字節(jié)碼生成和編譯時字節(jié)碼增強。這個問題的解決方案可能影響到你的構(gòu)建過程(但寧可如此,你也不
愿受到其它像用戶那樣的影響)
■ 持續(xù)性對象的生命周期是什么樣的?有些對象的生命周期依賴于其它關(guān)聯(lián)對象的生命周期嗎?
我們?nèi)绾螌⒁粋€對象的生命周期轉(zhuǎn)化為數(shù)據(jù)庫行的生命周期?
■ 為排序、檢索和合計提供了什么樣的工具?應(yīng)用可以在內(nèi)存中處理其中的一些事情。但為了有效地使用關(guān)系技術(shù)有時
需要通過數(shù)據(jù)庫完成這些工作
■ 如何有效地取出關(guān)聯(lián)數(shù)據(jù)?對關(guān)系數(shù)據(jù)的有效訪問通常通過表連接實現(xiàn)。面向?qū)ο蟮膽?yīng)用通常通過導(dǎo)航對象圖訪問數(shù)
據(jù)可能的話,兩種數(shù)據(jù)訪問模式應(yīng)該避免n+1次選擇的問題,以及它的補充笛卡爾積的問題(在一次查詢中取出過多的
數(shù)據(jù))
5)所有數(shù)據(jù)訪問技術(shù)都不得不面對的問題有那些?
■ 事務(wù)和并發(fā)性
■ 緩存管理(和并發(fā)性)