1. 程式人生 > >Orm框架介紹和常見的Android Orm框架

Orm框架介紹和常見的Android Orm框架

ORM(Object Relational Mapping)框架採用元資料來描述物件一關係對映細節,元資料一般採用XML格式,並且存放在專門的物件一對映檔案中。

先介紹一下ORM的概念,以前也一直聽說,不過沒詳細瞭解啥意思。其全稱叫做物件關係對映(Object Relation Mapping),是一種程式設計技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換。從效果上說,它其實是建立了一個可在程式語言裡使用的“虛擬物件資料庫”。

面向物件是從軟體工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關係資料庫則是從數學理論發展而來的.  兩者之間是不匹配的.而ORM作為專案中介軟體形式實現資料在不同場景下資料關係對映. 物件關係對映是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術.ORM就是這樣而來的。

目前ORM框架的產品非常之多,除了個大公司、組織的產品外,其他一些小團隊也在推出自己的ORM框架。目前流行的ORM框架有如下這些產品:

(1)Enitiy EJB:Enitiy EJB實際上也是一種ORM技術,這是一直備受爭議的元件技術。事實上,EJB為Java EE的蓬勃發展贏得了極高的聲譽,EJB作為一種重量級、高花費的ORM技術具有不可比擬的優勢。就其他架構設計來講,依然非常優秀。即使現在十分流行的輕量級Java EE架構,其實質是對經典Java EE架構的模仿——雖然存在些許的改進。EJB3.1也採取了低侵入式的設計,增加了Annotation,也具有極大的吸引力。

(2)hibernate:目前最流行的開源ORM框架,已經被選作JBoss的持久層解決方案。整個HIbernate專案也一併投入了Jboss的懷抱,而JBoss又加入了RedHat組織,所以現在Hibernate屬於RedHat 的一部分。Hibernate 靈巧的設計、優秀的效能,還有其豐富的文件都是其風靡全球的重要因素。

(3)iBatis: Apache軟體基金組織的子專案。與其稱它為一種ORM框架,不如稱它為一中“SQL Mapping”框架。曾經在J2EE的開發中扮演非常重要的角色,但因為不支援存粹的面向物件操作,因此現在逐漸地被取代。但是在一些公司,依然佔有一席之地,特別是一些對資料訪問特別靈活的地方,iBatis更加的靈活,它允許開發人員直接編寫SQL語句。

(4)TopLink:Oracle公司的產品,作為一個遵循OTN協議的商業產品,TopLink 在開發過程中可以自由地下載和使用,但是一旦作為商業產品被使用,則需要收取費用。由於這一點,TopLink 的市場佔有率不高。

(5)OBJ:Apache軟體基金組織的子專案。另一個開源的ORM框架,可以說是Apache作為iBatis之後的取代產品,也是非常優秀的O/R Mapping框架,但是由於Hibernate 的廣芒太盛,所以並未有廣泛的使用,而且由於OJB的開發文件不是很多,這也影響了OJB的流行。

android 常見的Orm 框架:

下面先列出幾個ORM框架:ORMLite、greendao、ormndroid、androrm、ActiveAndroid。其中以前最早接觸過ormlite,GreenDao瞭解過,其他的幾個真沒怎麼見過。所以這裡主要介紹ormlite和GreenDao。最開始現在stackoverflow輸入sqlite orm關鍵字,搜尋出了一些相關的文章:http://stackoverflow.com/search?q=sqlite+orm ,你會發現很有趣的是,ormlite的作者Gray和greenDao的開發團隊green robot同時出現在一些帖子中,向提問者推薦他們的框架。當然也會有一些熱心的朋友推薦ormdroid。其實不論在stackoverflow上還是官網上,greenDao的團隊的比較都是針對ORMLite的,可見,其主要的競爭對手,或許稱互相促進者更合適,畢竟他們沒有什麼商業利益,完全開源。所以開源的ORM框架中,ormLite和greenDao是最火的。其它幾種就不做比較,有興趣的朋友可以到官網看下。下面對ORMLite和GreenDao做個簡單的比較:

ormlite
基於註解和反射的的方式,導致ormlite效能有著一定的損失(註解其實也是利用了反射的原理)

優點:
文件較全面,社群活躍,有好的維護,使用簡單,易上手。

缺點:
基於反射,效率較低


GreenDao
官網中明確指明瞭其首要設計目標:
Maximum performance (probably the fastest ORM for Android):系能最大化
Easy to use APIs:便於使用
Highly optimized for Android:對於Android高度優化
Minimal memory consumption:最小化記憶體開銷
Small library size, focus on the essentials:較小的檔案體積,只集中在必要的部分上。

優點:
效率很高,插入和更新的速度是sqlite的2倍,載入實體的速度是ormlite的4.5倍。官網測試結果:http:/
/greendao-orm.com/features/
檔案較小(<100K),佔用更少的記憶體 ,但是需要create Dao,
操作實體靈活:支援get,update,delete等操作

缺點:
學習成本較高。其中使用了一個Java工程根據一些屬性和規則去generate一些基礎程式碼,類似於javaBean但會有一些規則,另外還有QueryBuilder、Dao等API,所以首先要明白整個過程,才能方便使用。沒有ORMLite那樣封裝的完整,不過greenDao的官網上也提到了這一點,正是基於generator而不是反射,才使得其效率高的多。

另外GreenDao支援Protocol buffers協議資料的直接儲存 ,如果通過protobuf協議和伺服器互動,不需要任何的對映。
Protocol Buffers協議:以一種高效可擴充套件的對結構化資料進行編碼的方式。google內部的RPC協議和檔案格式大部分都是使用它。
RPC:遠端過程呼叫(Remote Procedure Call,RPC)是一個計算機通訊協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。

可能因為GreenDao的效率高,而且需要學習成本高點,所以個人還是有興趣學一學的。接下來會發布一些GreenDao更詳細的文章,有對官方文件的翻譯還有程式碼的簡單講解。或許以上內容很簡單,只是簡單的介紹了下,對其它幾個框架並沒有做更多的介紹,有了解的朋友可以提出來,大家一起探討下。