ORM其全稱叫作對象關係映射(Object Relation Mapping),是一種程序設計技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換。它實際是建立了一個可在編程語言裏使用的「虛擬對象數據庫」。java
衆所周知,咱們在Android開發中使用的java是一種面向對象的編程語言。面向對象是從軟件工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關係數據庫則是從數學理論發展而來的。這二者之間從基本原理上是不一致的,此刻,ORM做爲項目中間件形式實現數據在不一樣場景下數據關係映射。對象關係映射是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術,ORM就是這樣而來的。sql
目前比較成熟的ORM框架有:ORMLite、GreenDao、ormdroid、androrm、ActiveAndroid。本文主要介紹當下比較流行的兩個框架:ORMLite和GreenDao。根據本人的實戰經驗,推薦你們使用GreenDao。數據庫
ORMLite基於註解和反射的的方式,致使ORMLite性能有着必定的損失(註解其實也是利用了反射的原理)。
編程
優勢: 文檔較全面,社區活躍,有好的維護,使用簡單,易上手api
缺點: 基於反射,效率較低服務器
GreenDAO是一個能夠幫助Android開發者快速將Java對象映射到SQLite數據庫的表單中的ORM解決方案,經過使用一個簡單的面向對象API,開發者能夠對Java對象進行存儲、更新、刪除和查詢。有以下三個特色:微信
1. 數據庫直接操做對象app
2. 自動生成代碼框架
3. 當操做數據庫頻繁的時候,其優點更加明顯編程語言
官網中明確指明瞭其首要設計目標:
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倍。官網測試結果:文件較小(<100K),佔用更少的內存 ,可是須要create Dao, 操做實體靈活:支持get,update,delete等操做。
缺點:
學習成本較高。其中使用了一個java工程根據一些屬性和規則去generate一些基礎代碼,相似於javaBean但會有一些規則,另外還有QueryBuilder、Dao等API,因此首先要明白整個過程,才能方便使用。沒有ORMLite那樣封裝的完整,不過GreenDao的官網上也提到了這一點,正是基於generator而不是反射,才使得其效率高的多。
另外GreenDao支持Protocol buffers協議數據的直接存儲 ,若是經過protobuf協議和服務器交互,不須要任何的映射。 Protocol Buffers協議:以一種高效可擴展的對結構化數據進行編碼的方式。google內部的RPC協議和文件格式大部分都是使用它。
由上圖分析以下:
1. 吞吐量:
GreenDao不管在數據插入、更新、讀取方面的吞吐量都遠在ORMLite以及ActiveAndroid二者之上。
2. 效率:
對數據進行insert和update時GreenDao的效率是ORMLite的兩倍,執行read操做時GreenDao的效率達到了ORMLite的四倍之多。
Android studio :
compile 'org.greenrobot:greendao:2.2.1' compile 'org.greenrobot:greendao-generator:2.2.0'
這三個通用類用於生成表、字段以及對應的對象,咱們能夠理解爲一個對象對應一個table,每一個對象裏面的屬性對應每一個table裏面的字段。
DBTable.java
DBField.java
DBCodeGenerate.java
DBTable.java
源碼見GitHub com\open\common\database\DBTable.java
DBField.java
源碼見 GitHub com\open\common\database\DBField.java
DBCodeGenerate.java
源碼見GitHub com\open\common\database\DBCodeGenerate.java
用以上三個類生成代碼,範例以下: (注意:必定要在main方法中執行生成。)
CodeGenerate.java
源碼見GitHub DataBaseDemo com\open\common\sdk\dbdemo\CodeGenerate.java
run上面這個main方法便可在E:/GreenDao/src生成獲得以下幾個類:
本身再寫一個供本身使用的封裝的類 DBHelper.java
源碼見GitHub com\open\common\sdk\dbdemo\DBHelper.java
增:
UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao(); userInfoDao.insert(userObj);
刪:
UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao(); userInfoDao.delete(userObj);
改:
UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao(); userInfoDao.update(userObj);
查:
UserInfoDao userInfoDao = DBHelper.getInstance(this).getUserInfoDao(); UserInfo user=userInfoDao.queryBuilder().unique();
UserInfoDao裏面的方法確定不止這四個,還有不少方便操做數據庫的api,心動不如行動,趕快嘗試一下吧~~
GreenDao官網

本文版權歸Open軟件開發小組全部,如需轉載請聯繫主編申請受權。
申請加羣交流學習請加主編微信:Jf-1994(井方哥),並備註:姓名-地區-公司-職業-加羣。
專一Android開發,歡迎關注!
本文分享自微信公衆號 - Open軟件開發小組(open_dev)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。