XWDatabase
開源XWDatabase GitHub 地址:github.com/qxuewei/XWD…git
XWDatabase 的亮點github
筆鋒一轉,V1.0 版本會存在不少不足,但願各位前輩和大牛多多指正,多提 issues
數據庫
下面簡述一下此庫的一些設計思路和使用方法數組
- (void)saveOnePerson
{
XWPerson *person = [XWPerson testPerson:2];
[XWDatabase saveModel:person completion:^(BOOL isSuccess) {
}];
}
複製代碼
實例化一個對象, 調用 saveModel
方法。安全
- (void)saveModels
{
NSMutableArray *persons = [[NSMutableArray alloc] init];
for (int i = 0; i < 1000; i++) {
[persons addObject:[XWPerson testPerson:i]];
}
[XWDatabase saveModels:persons completion:^(BOOL isSuccess) {
}];
}
複製代碼
實例化一堆對象, 調用 saveModels
方法。bash
- (void)deleteModel
{
XWPerson *person = [XWPerson new];
person.cardID = @"1"; /// 指定想刪除的主鍵(或聯合主鍵)
[XWDatabase deleteModel:person completion:^(BOOL isSuccess) {
}];
}
複製代碼
實例化一個對象,爲主鍵賦值(得知道刪的是哪一個,讓她猜,臣妾作不到), 調用 deleteModel
方法。多線程
- (void)clearModel
{
[XWDatabase clearModel:XWPerson.class completion:^(BOOL isSuccess) {
}];
}
複製代碼
調用 clearModel
方法,傳入想刪除的模型類app
/// 刪除 age > 50 的數據
- (void)clearModel
{
[XWDatabase clearModel:XWPerson.class condition:@"age > '50'" completion:^(BOOL isSuccess) {
}];
}
複製代碼
調用 clearModel
方法,傳入想刪除的模型類和條件異步
/// 更名
- (void)updateModel
{
XWPerson *person = [XWPerson new];
person.cardID = @"2";
person.name = @"新名字";
/// 自定義成員變量更新
[XWDatabase updateModel:person updatePropertys:@[@"name"] completion:^(BOOL isSuccess) {
}];
}
複製代碼
實例化一個對象,爲主鍵和有變化的成員變量賦值, 調用 updateModel
方法,傳入想更新的成員變量名稱。工具
/// 根據傳入的模型總體更新
- (void)updateModel
{
XWPerson *person = [XWPerson new];
person.cardID = @"2";
person.name = @"新名字";
person.girls = @[@"小妹",@"校花",@"小baby"];
/// 整個模型更新
[XWDatabase saveModel:person completion:^(BOOL isSuccess) {
}];
}
複製代碼
實例化一個對象, 調用 updateModel
方法,傳入想更新的模型。
- (void)getOnePerson
{
XWPerson *person = [XWPerson new];
person.cardID = @"81";
[XWDatabase getModel:person completion:^(XWPerson * obj) {
}];
}
複製代碼
實例化一個對象,爲主鍵賦值, 調用 getModel
方法。
- (void)getModels
{
[XWDatabase getModels:XWPerson.class completion:^(NSArray * _Nullable objs) {
}];
}
複製代碼
調用 getModels
方法,傳入模型類
/// 獲取數據庫中全部該模型存儲的數據 - 按 age 字段降序排列
- (void)getModelsSortAge
{
[XWDatabase getModels:XWPerson.class sortColumn:@"age" isOrderDesc:YES completion:^(NSArray * _Nullable objs) {
}];
}
複製代碼
調用 getModels
方法,傳入模型類和要排序的字段
/// 獲取數據庫中全部該模型存儲的數據 - 自定義查找條件 (例如模糊查詢 name 含 學偉 的數據)
- (void)getModelsCondition
{
[XWDatabase getModels:XWPerson.class condition:@"name like '%學偉'" completion:^(NSArray * _Nullable objs) {
}];
}
複製代碼
調用 getModels
方法,傳入模型類和查詢的條件
/// 獲取數據庫中全部該模型存儲的數據 - 自定義查找條件可排序 (例如模糊查詢 name 含 學偉 的數據, 而且按 age 升序排序)
- (void)getModelsConditionSort
{
[XWDatabase getModels:XWPerson.class sortColumn:@"age" isOrderDesc:NO condition:@"name like '%學偉'" completion:^(NSArray * _Nullable objs) {
}];
}
複製代碼
調用 getModels
方法,傳入模型類和查詢的條件和排序的成員變量名稱
+ (void)initialize
+ {
[XWDatabase updateTable:self completion:^(BOOL isSuccess) {
}];
複製代碼
在模型對象的 initialize
方法中 調用 updateTable
方法。之因此在 initialize
方法中調用是保證用戶無感知的狀況下在操做此模型進行數據操做時自動更新。
以上就是 XWDatabase
V1.0 版本的全部功能示例。謝謝!
下面介紹一些使用規範和功能擴展。
XWDatabaseModelProtocol
協議/**
主鍵 不可更改/惟一性
@return 主鍵的屬性名
*/
+ (NSString *)xw_primaryKey;
/**
聯合主鍵成員變量數組 (多個屬性共同定義主鍵) - 優先級大於 'xw_primaryKey'
@return 聯合主鍵成員變量數組
*/
+ (NSArray < NSString * > *)xw_unionPrimaryKey;
/**
自定義對象映射 (key: 成員變量名稱 value: 對象類)
@return 自定義對象映射
*/
+ (NSDictionary *)xw_customModelMapping;
/**
忽略不保存數據庫的屬性
@return 忽略的屬性名數組
*/
+ (NSSet <NSString *>*)xw_ignoreColumnNames;
/**
自定義字段名映射表 (默認成員變量即變量名, 可自定義字段名 key: 成員變量(屬性)名稱 value: 自定義數據庫表字段名)
@return 自定義字段名映射表
*/
+ (NSDictionary *)xw_customColumnMapping;
/**
自定義表名 (默認屬性類名)
@return 自定義表名
*/
+ (NSString *)xw_customTableName;
複製代碼
當模型遵照 XWDatabaseModelProtocol
協議並選擇性實現其中某些方法時她便會更好的爲您服務。固然 主鍵 xw_primaryKey
(或聯合主鍵 xw_unionPrimaryKey
)是查詢和更新必需要實現的方法。
若是模型中成員變量存在其餘的自定義模型,那其餘的自定義模型須要聽從 NSCoding
協議並實現 initWithCoder
和 encodeWithCoder
方法。 XWDatabase 中的 NSObject+XWModel
提供了一個宏能夠快速使自定義對象具有歸解檔的功能 XWCodingImplementation
runtime
獲取對象成員變量名稱和類型生成 建表 SQL
語句SQL
語句Runloop
保持活躍)進行數據庫操做,使用主線程隊列保證數據操做的同步hash
值已達到數據重用。此庫支持 CocoaPod
集成:
pod 'XWDatabase'
複製代碼
項目源碼開源在 GitHub 中,連接: XWDatabase
做者:極客學偉 博客:blog.csdn.net/qxuewei/