? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Android數(shù)據(jù)庫(kù)居然可以如此輕巧
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -Sugar ORM簡(jiǎn)單指南
Android下的數(shù)據(jù)庫(kù)操作一直是一個(gè)比較令人頭疼的事,如果用原生編寫(xiě),那么除了數(shù)據(jù)庫(kù)連接、版本升級(jí)、基礎(chǔ)查詢(xún)等幾個(gè)基本功能可打包復(fù)用外,業(yè)務(wù)邏輯從Schema到增刪改查都必須重寫(xiě)一遍。而更多的時(shí)候,我項(xiàng)目的數(shù)據(jù)庫(kù)業(yè)務(wù)邏輯其實(shí)并沒(méi)有那么高的性能要求和復(fù)雜度,因此,選擇一款ORM庫(kù)代替,是一件極為明智的選擇。
恰似柳暗花明
目前Android ORM開(kāi)源項(xiàng)目中,最知名、應(yīng)用最廣泛的是GreenDAO,它出自著名的greenrobot(就是寫(xiě)EventBus的那群大神),常年排在Github Android ORM榜單的第一位,其優(yōu)缺點(diǎn)網(wǎng)上已有眾多文章深入解讀,這里不再深入。
結(jié)合我自身業(yè)務(wù)需求,GreenDAO仍然顯得太重了--它需要用JAVA桌面程序生成Model(其實(shí)是因?yàn)镴AVA我只會(huì)android啊..這不是要我命么),因此我一直采用原生的方式處理數(shù)據(jù)庫(kù)業(yè)務(wù)邏輯,直到內(nèi)心崩潰。到Github又趴了一遍,結(jié)果立馬就深深?lèi)?ài)上了排名第二的Sugar ORM并立即運(yùn)用到項(xiàng)目中。
Sugar ORM特性
簡(jiǎn)單,就是對(duì)Sugar最高的評(píng)價(jià)。KISS(Keep it simple and stupid)原則最完美的展現(xiàn),需要經(jīng)驗(yàn)豐富的代碼重構(gòu)才能做到。我一直是ORM的忠實(shí)擁躉者,我首先考慮快速開(kāi)發(fā),從不考慮性能。從Entity FrameWork到Eloquent ORM再到Sugar ORM,雖然Sugar沒(méi)有前兩者強(qiáng)大,但是我覺(jué)得已經(jīng)足夠,為什么?
先來(lái)看看Sugar的介紹里面自己是怎么說(shuō)的:
A simple, concise, and clean integration process with minimal configuration.
(用最少的配置實(shí)現(xiàn)最簡(jiǎn)單、明了、暢快的集成過(guò)程)
Automatic table and column naming through reflection.
(采用反射的方式無(wú)須干預(yù)自動(dòng)生成表和字段)
Support for migrations between different schema versions.
(支持不同版本數(shù)據(jù)庫(kù)集合的遷移)
那么Sugar的集成,到底簡(jiǎn)單到什么程度呢。看看Bean的編寫(xiě):
不像GreenDAO,需要專(zhuān)門(mén)用桌面工具生成Bean。不需要你寫(xiě)表創(chuàng)建代碼,不需要寫(xiě)增刪改查的代碼(當(dāng)然業(yè)務(wù)代碼還是要寫(xiě),他懂你的心情,不懂你的心),就是簡(jiǎn)單到這個(gè)程度。如果屬性中有Drawable等不想存入數(shù)據(jù)庫(kù)的字段,那么加上@Ignore就好,隨心所欲。
配置2步搞定
Sugar的配置只有2處.
1.修改你的AndroidManifest.xml
如圖,依此為包括數(shù)據(jù)庫(kù)名稱(chēng)、版本、是否打開(kāi)日志、你的項(xiàng)目包名。別忘了在application標(biāo)簽加上2中重載的Application類(lèi)參數(shù)
2.為你的Application類(lèi)添加初始化和銷(xiāo)毀。
一個(gè)啟動(dòng),一個(gè)關(guān)閉。設(shè)置好后其他都不需要操心。
想早點(diǎn)下班,用QueryBuilder
ORM最強(qiáng)大的地方體現(xiàn)在OOP原則的查詢(xún)操作上,Sugar把增刪改查都給你封好了。因?yàn)樽銐蚝?jiǎn)單,所以就以查詢(xún)?yōu)槔?/p>
1.Id查詢(xún),findById
2.簡(jiǎn)單Sql語(yǔ)句查詢(xún),find
3.復(fù)雜Raw語(yǔ)句查詢(xún),findWithQuery
3.數(shù)量查詢(xún),count
復(fù)雜點(diǎn)的業(yè)務(wù)邏輯,寫(xiě)好Sql語(yǔ)句,用executeQuery或者findWithQuery執(zhí)行,選哪個(gè)函數(shù)看你心情,開(kāi)心就好。倒是有一個(gè)需要注意的坑,Sugar有一個(gè)命名規(guī)范約定,如果字段以駝峰命名法命名,需要改為下劃線命名法,如“testUnderscore”需要改為“test_underscore”。不過(guò)你也不必過(guò)于擔(dān)心,Sugar已經(jīng)提供了函數(shù)StringUtil.toSQLName("testUnderscore"),自動(dòng)幫你轉(zhuǎn)換命名。
我不知道你,反正我就他了
其實(shí)在剛開(kāi)始做Android開(kāi)發(fā)時(shí),用到國(guó)內(nèi)大神寫(xiě)的xUtils框架時(shí)就已經(jīng)較淺的了解ORM了,但是后來(lái)放棄堅(jiān)持用原生寫(xiě)所有代碼。由于疏于了解,只知道GreenDAO,但是用起來(lái)過(guò)于麻煩。發(fā)現(xiàn)Sugar之后,各種數(shù)據(jù)也不打算存Preference了,我仍然堅(jiān)持不打算用Annotation庫(kù),但Sugar肯定會(huì)用在之后的每一個(gè)項(xiàng)目。因?yàn)楹?jiǎn)單,可以把更多的精力放在業(yè)務(wù)邏輯上,這不正是開(kāi)源社區(qū)的思想么。我不知道你,反正我就他了。
相關(guān)資料
項(xiàng)目地址:https://github.com/satyan/sugar
文檔:http://satyan.github.io/sugar/getting-started.html
‘2016-6-16更新
在使用中發(fā)現(xiàn),sugar自android-studio2.1(看issue可能是gradle版本原因)會(huì)無(wú)法初始化model的數(shù)據(jù)表,所以不再推薦此輪子,建議轉(zhuǎn)為liteORM或者realm!!
歡迎加App獨(dú)立開(kāi)發(fā)群? 『533838427』