如何優(yōu)雅的寫(xiě)一篇安利文-以Sugar ORM為例

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 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)足夠,為什么?

項(xiàng)目自己都認(rèn)為--極致簡(jiǎn)單的方式處理數(shù)據(jù)庫(kù)業(yè)務(wù)

先來(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ě):

一個(gè)Bean的例子

不像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ù)

AndroidManifest.xml添加數(shù)據(jù)庫(kù)信息

2.為你的Application類(lèi)添加初始化和銷(xiāo)毀。

一個(gè)啟動(dòng),一個(gè)關(guān)閉。設(shè)置好后其他都不需要操心。

在Application中添加Sugar環(huá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

不用寫(xiě)一長(zhǎng)串代碼,一句話搞定

復(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』

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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