GreenDao的使用步驟

最近一段時(shí)間,由于項(xiàng)目需要進(jìn)行優(yōu)化宇姚,項(xiàng)目中的數(shù)據(jù)緩存可以說(shuō)是很混亂,有SqlLite,ActiviteAndroid,sp等,所以就打算把這些涉及到數(shù)據(jù)庫(kù)知識(shí)的信息給其統(tǒng)一到一個(gè)數(shù)據(jù)庫(kù)中空盼,以便后期升級(jí)維護(hù),從而增加程序的可擴(kuò)展性新荤,之所以選擇greendao,是因?yàn)槠渚邆浜芏鄡?yōu)點(diǎn):
GreenDao
官網(wǎng)中明確指明了其首要設(shè)計(jì)目標(biāo):
Maximum performance (probably the fastest ORM for Android):系能最大化
Easy to use APIs:便于使用
Highly optimized for Android:對(duì)于A(yíng)ndroid高度優(yōu)化
Minimal memory consumption:最小化內(nèi)存開(kāi)銷(xiāo)
Small library size, focus on the essentials:較小的文件體積揽趾,只集中在必要的部分上。
優(yōu)點(diǎn):
效率很高苛骨,插入和更新的速度是sqlite的2倍篱瞎,加載實(shí)體的速度是ormlite的4.5倍苟呐。官網(wǎng)測(cè)試結(jié)果:http://greendao-orm.com/features/
文件較小(<100K)俐筋,占用更少的內(nèi)存 牵素,但是需要create Dao,
操作實(shí)體靈活:支持get澄者,update笆呆,delete等操作
缺點(diǎn):
學(xué)習(xí)成本較高。其中使用了一個(gè)java工程根據(jù)一些屬性和規(guī)則去generate一些基礎(chǔ)代碼粱挡,類(lèi)似于javaBean但會(huì)有一些規(guī)則赠幕,另外還有QueryBuilder、Dao等API询筏,所以首先要明白整個(gè)過(guò)程榕堰,才能方便使用。沒(méi)有ORMLite那樣封裝的完整嫌套,不過(guò)greenDao的官網(wǎng)上也提到了這一點(diǎn)逆屡,正是基于generator而不是反射,才使得其效率高的多踱讨。
另外GreenDao支持Protocol buffers協(xié)議數(shù)據(jù)的直接存儲(chǔ) 康二,如果通過(guò)protobuf協(xié)議和服務(wù)器交互,不需要任何的映射勇蝙。
下面就來(lái)講解一下整合greendao中需要注意的知識(shí)點(diǎn)沫勿。
1 按照greendao的說(shuō)明文檔,添加一些依賴(lài)的庫(kù)到app下的gradle中
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}
}
apply plugin: 'org.greenrobot.greendao'

greendao {
//數(shù)據(jù)庫(kù)的schema版本味混,也可以理解為數(shù)據(jù)庫(kù)版本號(hào)
schemaVersion 1
//設(shè)置DaoMaster产雹、DaoSession、Dao包名翁锡,也就是要放置這些類(lèi)的包的全路徑蔓挖。
daoPackage 'cn.hnshangyu.testgreendao.greendao'
//設(shè)置DaoMaster、DaoSession馆衔、Dao目錄
targetGenDir 'src/main/java'
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
此時(shí)瘟判,讓人郁悶的是,編譯報(bào)錯(cuò)角溃,不對(duì)啊拷获,完全是按照官方文檔的要求來(lái)的啊,怎么還報(bào)錯(cuò)呢减细,具體報(bào)錯(cuò)信息如下:
Error:Execution failed for task ':app:greendao'.

org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava/lang/Object;)J
最后匆瓜,通過(guò)查看資料,后來(lái)把這些配置信息重新整合了一下:
在app下的build.grdle中,如下:

apply plugin: 'org.greenrobot.greendao'

greendao {
//數(shù)據(jù)庫(kù)的schema版本驮吱,也可以理解為數(shù)據(jù)庫(kù)版本號(hào)
schemaVersion 1
//設(shè)置DaoMaster茧妒、DaoSession、Dao包名左冬,也就是要放置這些類(lèi)的包的全路徑桐筏。
daoPackage 'cn.hnshangyu.testgreendao.greendao'
//設(shè)置DaoMaster、DaoSession拇砰、Dao目錄
targetGenDir 'src/main/java'
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
在工程的build.grdle中梅忌,如下:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
然后重新編譯,編譯通過(guò)毕匀,問(wèn)題解決。編譯通過(guò)后癌别,系統(tǒng)會(huì)在你要求輸出的目錄中自動(dòng)生成DaoMaster皂岔、DaoSession等相關(guān)的數(shù)據(jù)庫(kù)工具類(lèi),如果這些文件生成展姐,那么你的配置成功了躁垛。
2 定義實(shí)體bean,以下是實(shí)體中常用到的注解含義
@Entity  表明這個(gè)實(shí)體類(lèi)會(huì)在數(shù)據(jù)庫(kù)中生成一個(gè)與之相對(duì)應(yīng)的表圾笨。
@Id  對(duì)應(yīng)數(shù)據(jù)表中的 Id 字段教馆,有了解數(shù)據(jù)庫(kù)的話(huà),是一條數(shù)據(jù)的唯一標(biāo)識(shí)擂达。
@Property(nameInDb = “STUDENTNUM”)  表名這個(gè)屬性對(duì)應(yīng)數(shù)據(jù)表中的 STUDENTNUM 字段土铺。
@Property  可以自定義字段名,注意外鍵不能使用該屬性
@NotNull  該屬性值不能為空
@Transient  該屬性不會(huì)被存入數(shù)據(jù)庫(kù)中
@Unique  表名該屬性在數(shù)據(jù)庫(kù)中只能有唯一值
很像Java web端對(duì)hibernater數(shù)據(jù)庫(kù)中的實(shí)體的定義板鬓。具體定義這里就不做過(guò)多的說(shuō)明悲敷。
4 數(shù)據(jù)庫(kù)的增、刪俭令、查后德、改,具體不細(xì)說(shuō)抄腔,但其中的關(guān)鍵字含義在這里介紹一下
eq equal ==
notEq notequal !=
ge greater or equal >=
gt greater than >
le less or equal <=
lt less than <
當(dāng)然不止這么多瓢湃,不過(guò)這幾個(gè)對(duì)于基本的增、刪赫蛇、查绵患、改是使用最頻繁的
5 數(shù)據(jù)庫(kù)的升級(jí)


image.png

每次有舊表的數(shù)據(jù)庫(kù)字段的增加或者新建新表,都有修改版本號(hào)悟耘,這是升級(jí)的依據(jù)藏雏。部分代碼如下:
public static void migrate(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) {
//1 新建臨時(shí)表
generateTempTables(db, daoClasses);
//2 創(chuàng)建新表
createAllTables(db, false, daoClasses);
//3 臨時(shí)表數(shù)據(jù)寫(xiě)入新表,刪除臨時(shí)表
restoreData(db, daoClasses);
}
進(jìn)過(guò)測(cè)試,無(wú)論數(shù)據(jù)庫(kù)字段的增加或者新建新表掘殴,都能升級(jí)成功赚瘦,但同時(shí)不要忘記改版本號(hào)喲。后期會(huì)把源碼附上奏寨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末起意,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子病瞳,更是在濱河造成了極大的恐慌揽咕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件套菜,死亡現(xiàn)場(chǎng)離奇詭異亲善,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逗柴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蛹头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人戏溺,你說(shuō)我怎么就攤上這事渣蜗。” “怎么了旷祸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵耕拷,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我托享,道長(zhǎng)骚烧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任闰围,我火速辦了婚禮止潘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辫诅。我一直安慰自己凭戴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布炕矮。 她就那樣靜靜地躺著么夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肤视。 梳的紋絲不亂的頭發(fā)上档痪,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音邢滑,去河邊找鬼腐螟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乐纸。 我是一名探鬼主播衬廷,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汽绢!你這毒婦竟也來(lái)了吗跋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宁昭,失蹤者是張志新(化名)和其女友劉穎跌宛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體积仗,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疆拘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寂曹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎迄。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稀颁,靈堂內(nèi)的尸體忽然破棺而出芬失,到底是詐尸還是另有隱情楣黍,我是刑警寧澤匾灶,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站租漂,受9級(jí)特大地震影響阶女,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哩治,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一秃踩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧业筏,春花似錦憔杨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至台谢,卻和暖如春寻狂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朋沮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工蛇券, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓纠亚,卻偏偏與公主長(zhǎng)得像塘慕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菜枷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容