EasyDataKit 簡單易用的 SQLite 輪子

Hawk0620發表於2016-11-11

EasyDataKit 是一個基於 FMDB 封裝的庫,它可以免去開發者編寫複雜 SQL 的困擾,更加專注業務上的事情,從而提高開發效率。

特徵

  • 類 ORM 介面
  • 自動建立庫和表,支援表新增欄位的修改
  • 支援 where 查詢語句
  • 自動事務提升插入效率

使用

EasyDataKit 適用於將網路請求的資料持久化到資料庫中,特別是處理網路請求資料時不習慣把資料轉換成 model。筆者的淺見是:轉換對效能是有消耗的,獲得的可讀性好處也可以通過字串常量解決。(這兒有篇探討

假設你通過網路請求獲取到了資料:

 

你可將這段 JSON String 轉換成 Dictionary 或 Array:

接著便可使用 EasyDataKit 的 API 進行儲存:

可以手動為資料新增列,實現滿足業務的需求:

如果你想讓某紀錄關聯其它物件,可以將物件儲存後返回的 id 作為 value,key 是該紀錄原本對應該物件的欄位,這相當於用 id 這個值去替換原本欄位對應的物件,從而達到拆分的目的:

EasyDataKit 還可以儲存索引

對儲存來說,EasyDataKit 還提供了自動 ALTER TABLE 新增列的功能,方便開發者應對升級,原理是當檢測到待儲存的字典 keys 陣列元素個數比之前已經在表中的列多時,則會自動為表新增新的列,即並不支援修改列和刪除列的操作,而 EasyDataKit 對建立的索引是支援修改刪除的。

查詢:

查詢巢狀物件並將其轉換為 Dictionary 或 Array:

更新:

刪除:

由上面可以看出,只要建立出 EDKEntity 物件,就可以輕鬆加愉快地進行儲存,查詢,修改,刪除操作。開發者無需建立資料庫、表,EasyDataKit 也支援 db 的劃分,但不提供記憶體快取,原因是筆者認為沒有熱塊的資料庫快取意義不是太大。當有寫操作發生的時候,EasyDataKit 會通過輪詢的事務機制打包寫操作,從而提高頻繁寫操作的效率。(更詳細的使用請移步 EasyDataKit 中的 Example)

原始碼簡析

EasyDataKit 有個 swizzle 了 NSMutableDictionary 的 setObject:forKey: 和 NSMutableArray 的 addObject:,使得應對空值不會 crash。

EasyDataKit 還有個遞迴方法:dealWithObject:,主要有兩個用途:一是用來檢測除了 NSDictionary、NSArray、NSString、NSNumber、NSNull 這些型別以外的合法性,譬如 UIView 型別直接呼叫 description 轉換成字串;二是為了能讓巢狀的 Dictionary 或 Array 以 JSON String 的形式存入資料庫,在取出後仍可以將其轉換回 Dictionary 或 Array。

DISPATCH_SOURCE_TYPE_TIMER 建立的定時器。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

EasyDataKit 簡單易用的 SQLite 輪子

相關文章