1. 程式人生 > >Android進階系列-手寫資料庫框架

Android進階系列-手寫資料庫框架

         資料庫在某些特定需求下是很重要的,像持久化資料,一些不需要實時或者長時間不變的資料,可以放在資料庫中做快取,這樣就算使用者網路不好或者斷網的情況下,依然是可以檢視一些以前的資料。像新聞或者諮詢類。這樣做是不可避免的。提高使用者的體驗。


   谷歌為我們開發者提供了最基礎的資料庫操作類,同時也提供了SqliteDatabase直接建立修改資料庫和表。但是隻是這樣不能滿足我們平時的敏捷開發。作為一個應用層程式設計師,很多時候只是想去關心儲存和讀取資料,資料處理等問題的解決。而不是花時間和精力在如何去存,如何去取資料庫資料。這就是架構出現的前提。將一些面向過程的演算法或者業務邏輯封裝,可再次呼叫。易擴充套件、高靈敏。讓程式猿專心的去整理專案需求和邏輯。解放大腦,提高工作效率。

     現在資料庫有很多三方框架,比如GreenDao,Afinal、xUtils、ThinkAndroid、volley等等。但是這些三方匯入後,檔案數太大了。而且很多都集成了網路載入框架,圖片載入框架。這樣就有了一定的耦合性。比如我只喜歡xUtils的資料庫框架,不喜歡它的網路載入,想用Volley的網路載入框架。咋辦呢?兩個都匯入?是的,可以這樣,但是專案的檔案數就太大了。編譯時壓力大。而且一些公司想讓程式猿寫自己的框架,不使用別人釋出的框架,這樣程式碼是可以高擴充套件的。出現什麼問題也是可以及時修改。如果匯入的三方庫在專案成熟階段出現問題。那是不是要推翻這個庫,重新去匯入一個,重新在寫一遍邏輯,而且又有誰能保證,再次匯入的庫不會出錯呢?

      我把大致的封裝思路,以圖片的形式展示出來。


對應的UML邏輯圖


  使用起來也非常方便,這裡的對映邏輯和GreenDao的底層原始碼使用的是一個原理。採用表和類屬性對映,並對其進行了快取。只有在切換表的連結時,會重新建立連結。

 優點:

1、支援sql語句自拼接。資料庫直接執行sql語句。

2、支援傳入類物件進行增刪改查,比如User,在insert的時候,插入User的例項,屬性都封裝在user中。通過反射獲取它的屬性值,存入資料庫。

3、高擴充套件,每個新建的儲存型別。直接繼承DefaultBaseDao即可。可以在這裡做一些該類獨有的操作。

4、支援多資料庫切換,多資料庫操作。同時支援資料庫分庫管理,多資料庫多版本多使用者同時升級,採取XML指令碼升級。這裡的指令碼語句沒有封裝。

5、支援boolean、byte、short、int、long、float、double資料型別的儲存和讀取。

使用注意事項:

1、建立儲存資料類時,需要使用註解去標註類名(表名@DbTable)、類屬性(表字段@DbField)。若是有主鍵(@DbPrimaryField)也需要標註。

2、需要建立一個相應的Dao層類和資料庫的連結。

使用時匯入gandle: compile 'com.singleshu8:LemonDao:1.0.5'

具體使用參照:https://github.com/SingleShu/LemonDaoDemo