天天看點

SQLite3中針對Objective-C的持久層架構

SQLitepersistentobjects這個架構利用反射機制與value objects的完美結合,對sqlite3進行了非常輕量級的對象封裝(這點有點像我2007年時寫的一個java持久層架構,過些時候我整理一下,開源出來),使用者在程式設計過程中,基本不用再寫sql語句,也不需要再手工生成sqlite3資料庫檔案。你所關心的,就是值對象繼承一個核心類,然後添加值對像的屬性,實際他就是一款Objective-C實作的ActiveRecord–Rails社群紅透半邊天的ORM模式。

一、sqlite persistent objects的下載下傳與安裝

sqlitepersistentobjects是google code上的一個開源項目,大家可以出下載下傳它,本項目位址是:http://code.google.com/p/sqlitepersistentobjects/

下載下傳後,得到的源碼包src内的源檔案,copy到自己的項目中,建議最好建立一個分類(new group)見注1,與其它源碼分離開來,便于管理.然後再工程中添加”libsqlite3.dylib”庫。見注2

二、sqlite persistent objects的使用

在使用前,我們先了解一下他是怎麼工作的,首先要建立一個Objective-C類,這個類隻需要繼承自“SQLitePersistentObject”,然後,添加您想要持久化的Objective-C 2.0屬性。當這個類被執行個體化後,調用”save”方法,會自動儲存到資料庫中。每一個“SQLitePersistentObject”的子類都會擁有資料庫中對應的一張表。每一個屬性(不包括集合類型,像,NSDictionary,NSArray,NSSet或這些類的可變類型)都會持久化到表中相應字段中。屬性中如果含有指針對象是”SQLitePersistentObject”執行個體,也将會在關聯表裡新添條記錄。注意,這裡的屬性必須是實作“NSCoding”的對象,如NSDate,NSString,NSData,NSMutableData,NSNumber與NSObject,而c-string,void pointer, strutct 或 union它們不是對象,将不會支援。但所有的數字(int,float等)都會儲存在應的字段上。

我們簡單要來做一個例子,定義一個類Person,繼承SQLitePersistentObject,把這個類的屬性儲存到資料庫中,代碼如下:

生成類檔案後,在其它使用的類中建立執行個體:

調用”save”方法,儲存到資料庫中:

加載表中的資料也相當的簡單。任何一個”Person”類都有多個提供查詢的類方法。例如,你可以查詢所有姓“lee”的人:

或者更靈活的使用SQL查詢條件:

注意大寫字母區分的情況用下劃線代替(ActiveRecord的慣例)。”findByCriteria:”傳回一個NSArray數組,”findFirstByCriteria:”傳回一個對象。

如果要更新,當然這裡先要查詢出來需要更新的對象,然後修改對象的值并儲存就可以了,這裡不再詳寫。

=========================================================

注1、Xcode界面中,右鍵點選Classes目錄,選擇“Add > New Group”,命名為SQLitePersistentObject。右鍵點選建立的 “SQLitePersistentObject”目錄,選擇“Add > Existing Files”,将解壓縮出來的src目錄下所有檔案導入。

注2、請右鍵點選左部菜單中的”Frameworks”目錄,選擇 “Add > Existing Frameworks…”,然後在本地目錄中選擇“/Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS3.1.2.sdk/usr/lib/”,找到“libsqlite3.0.dylib”檔案并輕按兩下。一個彈出視窗将出現,點選其中“Add”按鈕将庫添加入項目中。