ORM隨想
前言
周末的夜晚,總顯得特別無聊,總看衛(wèi)斯理的書不是辦法,得找點(diǎn)事情干干。前幾天為了驗(yàn)證自己的一個(gè)想法,到網(wǎng)上搜索,結(jié)果發(fā)現(xiàn)了hibernate,為了跑一跑hibernate,結(jié)果學(xué)習(xí)了Ant,最后發(fā)現(xiàn)hibernate是一個(gè)ORM工具,于是自然把視線轉(zhuǎn)移到了ORM。在網(wǎng)上的資料中游蕩,發(fā)現(xiàn)對于ORM沒有一個(gè)完整的中文資料,English的資源也不甚明了。于是有必要把自己所看、所想、所用的做一個(gè)小小的總結(jié)。
ORM的定義及來由
ORM是Object-Relational Mapping的簡稱,中文含義是“對象――關(guān)系映射”。此處的“對象”,乃是Object Oriented(面向?qū)ο蠹夹g(shù))中的對象,而“關(guān)系”則是關(guān)系數(shù)據(jù)庫中的關(guān)系。
為什么需要ORM呢?自然是因?yàn)樾枰獙ο蠛完P(guān)系互相轉(zhuǎn)換,而為什么需要互相轉(zhuǎn)換,就需要解釋一下“程序”的概念。最早關(guān)于程序的概念是:
程序=算法+數(shù)據(jù)結(jié)構(gòu)
而在信息處理領(lǐng)域,目前我們實(shí)際面對的程序概念是:
程序=數(shù)據(jù)+數(shù)據(jù)處理
計(jì)算機(jī)的程序有兩個(gè)大的應(yīng)用領(lǐng)域:科學(xué)計(jì)算和信息處理,最初的計(jì)算機(jī)程序大部分是為了進(jìn)行科學(xué)計(jì)算的,這也是為什么在早期的大學(xué)中計(jì)算機(jī)系是數(shù)學(xué)系的一個(gè)分支的原因。而隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,信息處理已經(jīng)成為計(jì)算機(jī)重點(diǎn)關(guān)注的問題。“信息技術(shù)”(Information Technology,IT)產(chǎn)業(yè)也不斷發(fā)展?fàn)顟B(tài),甚至脫離了計(jì)算機(jī)技術(shù)的領(lǐng)域,自立門派了。說了那么多,其實(shí)就是為了說明一個(gè)問題,目前的計(jì)算機(jī)程序,大部分是為了進(jìn)行信息處理的,而進(jìn)行信息處理的程序,就等于數(shù)據(jù)+數(shù)據(jù)處理。
而目前程序中的數(shù)據(jù)大部分是保存在關(guān)系數(shù)據(jù)庫中的。目前程序的數(shù)據(jù)處理流程大部分是用面向?qū)ο笳Z言編寫的,因此
程序=關(guān)系數(shù)據(jù)庫+面向?qū)ο笳Z言
這個(gè)等式在大部分狀況下成立。面向?qū)ο笳Z言中的基本信息存儲單位是“對象”,而關(guān)系數(shù)據(jù)庫中的基本信息存儲單位是“記錄”。那么,當(dāng)程序需要在數(shù)據(jù)的處理和數(shù)據(jù)的存儲之間交換信息時(shí),不可避免的要將“對象”和“記錄”進(jìn)行轉(zhuǎn)換。
關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)是關(guān)系代數(shù),面向?qū)ο笳Z言的理論基礎(chǔ)是面向?qū)ο蠹夹g(shù),如果能夠在具體的程序編寫之前解決“對象”和“記錄”的映射問題,提出一個(gè)通用的解決方案,那么一定能夠大大加快程序開發(fā)的效率和質(zhì)量。這個(gè)通用的解決方案在部分上已經(jīng)實(shí)現(xiàn)了,就是ORM。
力有未逮,下次再續(xù)……