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