項(xiàng)目介紹:https://github.com/netyouli/WHC_ModelSqliteKit
簡介
目標(biāo): 替代直接使用Sqlite和CoreData
架構(gòu): 采用runtime技術(shù)和Sqlite Api完美結(jié)合打造
易用: 告別繁瑣sql語句的編寫和CoreData復(fù)雜創(chuàng)建
支持: (NSData,NSString,Int,double,float,Bool,char,NSNumber)類型
強(qiáng)大: 支持模型嵌套模型類存儲到數(shù)據(jù)庫和多表嵌套聯(lián)查
智能: 根據(jù)數(shù)據(jù)庫模型類提供的VERSION方法返回的版本號來智能更新數(shù)據(jù)庫字段(動態(tài)刪除/添加)
要求
iOS 5.0 or later
Xcode 8.0 or later
集成
使用CocoaPods:
pod 'WHC_ModelSqlite', '~> 1.1.4'
手工集成:
導(dǎo)入文件夾WHC_ModelSqliteKit
用法
1.存儲嵌套模型對象到數(shù)據(jù)庫演示
Person * whc = [Person new];
whc.name = @"吳海超";
whc.age = 25;
whc.height = 180.0;
whc.weight = 140.0;
whc.isDeveloper = YES;
whc.sex = 'm';
// 嵌套car對象
whc.car = [Car new];
whc.car.name = @"撼路者";
whc.car.brand = @"大路虎";
// 嵌套school對象
whc.school = [School new];
whc.school.name = @"北京大學(xué)";
whc.school.personCount = 5000;
// school對象嵌套city對象
whc.school.city = [City new];
whc.school.city.name = @"北京";
whc.school.city.personCount = 1000;
[WHC_ModelSqlite insert:whc];
2.存儲批量模型對象到數(shù)據(jù)庫演示
NSArray * persons = [self makeArrayPerson];
[WHC_ModelSqlite insertArray:persons];
3.無條件查詢數(shù)據(jù)庫中模型類演示
NSArray * personArray = [WHC_ModelSqlite query:[Person class] where:nil];
4.條件查詢數(shù)據(jù)庫中模型類演示(where 條件查詢語法和sql where條件查詢語法一樣)
NSArray * personArray = [WHC_ModelSqlite query:[Person class] where:@"name = '吳海超2' OR age <= 18"];
5.查詢數(shù)據(jù)庫并對結(jié)果排序
///對person數(shù)據(jù)表查詢并且根據(jù)age自動降序或者升序排序
[WHC_ModelSqlite query:[Person class] order:@"by age desc/asc"];
6.查詢數(shù)據(jù)庫并對結(jié)果限制查詢條數(shù)
/// 對person數(shù)據(jù)表查詢并且并且限制查詢數(shù)量為8
[WHC_ModelSqlite query:[Person class] limit:@"8"];
/// 對person數(shù)據(jù)表查詢并且對查詢列表偏移8并且限制查詢數(shù)量為8
[WHC_ModelSqlite query:[Person class] limit:@"8 offset 8"];
7.修改數(shù)據(jù)庫中模型對象演示(where 條件查詢語法和sql where條件查詢語法一樣)
[WHC_ModelSqlite update:whc where:@"name = '吳海超2' OR age <= 18"];
8.刪除數(shù)據(jù)庫中模型對象演示(where條件查詢?yōu)榭談t刪除所有)
[WHC_ModelSqlite delete:[Person class] where:@"age = 25 AND name = '吳海超'"];
9.清空指定數(shù)據(jù)庫演示
[WHC_ModelSqlite clear:[Person class]];
10.刪除數(shù)據(jù)庫演示
[WHC_ModelSqlite removeModel:[Person class]];
11.刪除所有數(shù)據(jù)庫演示
[WHC_ModelSqlite removeAllModel];
12.獲取數(shù)據(jù)庫本地路徑演示
NSString * path = [WHC_ModelSqlite localPathWithModel:[Person class]];
13.獲取數(shù)據(jù)庫本地版本號演示
NSString * path = [WHC_ModelSqlite versionWithModel:[Person class]];
注意
當(dāng)模型類有新增/刪除屬性的時(shí)候需要在模型類里定義類方法(+ (NSString*)VERSION)修改模型類(數(shù)據(jù)庫)版本號來表明有字段更新操作隧出,庫會根據(jù)這個(gè)VERSION變更智能檢查并自動更新數(shù)據(jù)庫字段,無需手動更新數(shù)據(jù)庫字段
Api文檔
/**
* 說明: 存儲模型數(shù)組到本地(事務(wù)方式)
* @param model_array 模型數(shù)組對象(model_array 里對象類型要一致)
*/
+ (void)insertArray:(NSArray *)model_array;
/**
* 說明: 存儲模型到本地
* @param model_object 模型對象
*/
+ (void)insert:(id)model_object;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣阀捅,where為空則查詢所有)
* @return 查詢模型對象數(shù)組
*/
+ (NSArray *)query:(Class)model_class where:(NSString *)where;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param order 排序條件(排序語法和SQL order 查詢語法一樣胀瞪,order為空則不排序)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] order:@"by age desc/asc"];
/// 對person數(shù)據(jù)表查詢并且根據(jù)age自動降序或者升序排序
+ (NSArray *)query:(Class)model_class order:(NSString *)order;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param limit 限制條件(限制語法和SQL limit 查詢語法一樣,limit為空則不限制查詢)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] limit:@"8"];
/// 對person數(shù)據(jù)表查詢并且并且限制查詢數(shù)量為8
/// ?example: [WHC_ModelSqlite query:[Person class] limit:@"8 offset 8"];
/// 對person數(shù)據(jù)表查詢并且對查詢列表偏移8并且限制查詢數(shù)量為8
+ (NSArray *)query:(Class)model_class limit:(NSString *)limit;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣饲鄙,where為空則查詢所有)
* @param order 排序條件(排序語法和SQL order 查詢語法一樣凄诞,order為空則不排序)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] where:@"age < 30" order:@"by age desc/asc"];
/// 對person數(shù)據(jù)表查詢age小于30歲并且根據(jù)age自動降序或者升序排序
+ (NSArray *)query:(Class)model_class where:(NSString *)where order:(NSString *)order;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣,where為空則查詢所有)
* @param limit 限制條件(限制語法和SQL limit 查詢語法一樣傍妒,limit為空則不限制查詢)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] where:@"age <= 30" limit:@"8"];
/// 對person數(shù)據(jù)表查詢age小于30歲并且限制查詢數(shù)量為8
/// ?example: [WHC_ModelSqlite query:[Person class] where:@"age <= 30" limit:@"8 offset 8"];
/// 對person數(shù)據(jù)表查詢age小于30歲并且對查詢列表偏移8并且限制查詢數(shù)量為8
+ (NSArray *)query:(Class)model_class where:(NSString *)where limit:(NSString *)limit;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param order 排序條件(排序語法和SQL order 查詢語法一樣幔摸,order為空則不排序)
* @param limit 限制條件(限制語法和SQL limit 查詢語法一樣,limit為空則不限制查詢)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] order:@"by age desc/asc" limit:@"8"];
/// 對person數(shù)據(jù)表查詢并且根據(jù)age自動降序或者升序排序并且限制查詢的數(shù)量為8
/// ?example: [WHC_ModelSqlite query:[Person class] order:@"by age desc/asc" limit:@"8 offset 8"];
/// 對person數(shù)據(jù)表查詢并且根據(jù)age自動降序或者升序排序并且限制查詢的數(shù)量為8偏移為8
+ (NSArray *)query:(Class)model_class order:(NSString *)order limit:(NSString *)limit;
/**
* 說明: 查詢本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣颤练,where為空則查詢所有)
* @param order 排序條件(排序語法和SQL order 查詢語法一樣既忆,order為空則不排序)
* @param limit 限制條件(限制語法和SQL limit 查詢語法一樣,limit為空則不限制查詢)
* @return 查詢模型對象數(shù)組
*/
/// ?example: [WHC_ModelSqlite query:[Person class] where:@"age <= 30" order:@"by age desc/asc" limit:@"8"];
/// 對person數(shù)據(jù)表查詢age小于30歲并且根據(jù)age自動降序或者升序排序并且限制查詢的數(shù)量為8
/// ?example: [WHC_ModelSqlite query:[Person class] where:@"age <= 30" order:@"by age desc/asc" limit:@"8 offset 8"];
/// 對person數(shù)據(jù)表查詢age小于30歲并且根據(jù)age自動降序或者升序排序并且限制查詢的數(shù)量為8偏移為8
+ (NSArray *)query:(Class)model_class where:(NSString *)where order:(NSString *)order limit:(NSString *)limit;
/**
* 說明: 更新本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣嗦玖,where為空則更新所有)
*/
+ (void)update:(id)model_object where:(NSString *)where;
/**
* 說明: 清空本地模型對象
* @param model_class 模型類
*/
+ (void)clear:(Class)model_class;
/**
* 說明: 刪除本地模型對象
* @param model_class 模型類
* @param where 查詢條件(查詢語法和SQL where 查詢語法一樣患雇,where為空則刪除所有)
*/
+ (void)delete:(Class)model_class where:(NSString *)where;
/**
* 說明: 清空所有本地模型數(shù)據(jù)庫
*/
+ (void)removeAllModel;
/**
* 說明: 清空指定本地模型數(shù)據(jù)庫
* @param model_class 模型類
*/
+ (void)removeModel:(Class)model_class;
/**
* 說明: 返回本地模型數(shù)據(jù)庫路徑
* @param model_class 模型類
* @return 路徑
*/
+ (NSString *)localPathWithModel:(Class)model_class;
/**
* 說明: 返回本地模型數(shù)據(jù)庫版本號
* @param model_class 模型類
* @return 版本號
*/
+ (NSString *)versionWithModel:(Class)model_class;