对FMDB扩展了对象的存储与获取, 设计采用分类的方式便于OC对象广泛应用, 本扩展实现了[1.OC对象存储到数据库、2.从数据库中取出OC对象、3.直接嵌套的对象存取、多重嵌套的对象存取]
platform :ios, '8.0'
target 'TargetName' do
pod 'SYFMDBModel', '~> 0.0.5'
end
基础数据类型 | 结构体类型 | OC对象类型 | 嵌套类型 | |||||||||||||||
实测过类型: | int | NSInteger | NSUInteger | long long | int64_t | CGFloat | float | double | CGPoint | CGSize | CGRect | NSString | NSArray | NSNumber | NSDate | NSData | 直接嵌套对象 | 集合中嵌套对象 |
SQL存储类型: | INTEGER | INTEGER | INTEGER | INTEGER | INTEGER | REAL | REAL | REAL | TEXT | TEXT | TEXT | TEXT | BLOB | REAL | REAL | BLOB | 另开表存储 | 另开表存储 |
存储结果举例: | 1 | 1 | 1 | 1 | 1 | 1.1 | 1.1 | 1.1 | {4, 4} | {4, 4} | {{4, 4}, {4, 4}} | 文本 | 二进制 | 浮点型 | 时间戳 | 二进制 | 另开表存储 | 另开表存储 |
另外:存储到数据库之前属性声明是可变的, 从数据库中取值时得到的对象该属性仍然是可变的。
pod好后在需要的模型类中导入#import <SYFMDBModel/NSObject+SY_FMDBExtension.h>
, 需要在.m中重写
// 设置需保存到数据库中的属性名, 如都保存可直接返回YES
+ (BOOL)sy_savedPropertyName:(NSString *)name
{
return YES;
}
如果存在嵌套类, 可在.m中重写
+ (NSDictionary<NSString *,NSString *> *)sy_nestPropertyMapList
{
return @{@"属性名": @"嵌套的类名"};
}
不要忘记在嵌套类中也要执行与该步骤一样的操作
OC模型对象直接调用该实例方法可传入NSError的指针观察执行状况
First *first = [[First alloc] init];
NSError *error = nil;
BOOL result = [first sy_InsertWithError:&error];
查询数据可查询整张表的所有数据、按条件查询某条数据、按条件查询某个字段
- 查询所有数据: 返回搜寻的结果集合, 已内部处理转化为调用类的对象集合, 如有嵌套数据, 也一并转化处理好
NSError *error;
NSArray *arr = [First sy_FindAllWithError:&error];
- 按条件查询某条数据 此处需要注意, 如果条件字段为TEXT类型, 别忘记加上''符号
NSError *error;
NSArray *arr = [First sy_FindByCondition:@"where name = 'SYFMDBModel'" error:&error];
- 按条件查询某个字段 查询到的结果为一个集合
NSError *error;
NSArray *array = [First sy_FindName:@"SYFMDBModel" condition:@"" error:&error];
- 按条件删除
NSError *error = nil;
BOOL result = [First sy_RemoveByCondition:@"where name = 'SYFMDBModel'" andError:&error];
- 实例对象删除 - 需是查询到数据对象才能使用实例方法删除
NSError *error = nil;
BOOL result = [first sy_RemoveWithError:&error];
- 实例对象更新 - 需是查询到数据对象才能使用实例方法
NSError *error = nil;
BOOL result = [first sy_UpdateWithError:&error];
- 按条件更新某个字段
NSError *error = nil;
BOOL result = [Third sy_UpdateName:@"dateValue" newValue:nil condition:@"" error:&error];
注: 暂未支持字典进行嵌套,且集合嵌套只支持嵌套一个类