基于BaseDataModel的模型在sqlite中存入与取出 Write or read model based on BaseDataModel with sqlite
极致框架中的 EFFMDBTool可以非常简单方便的进行这一操作。只需要你采用基于BaseDataModel的模型即可。
@interface ContactModel : BaseDataModel
@end
@protocol ContactModel <NSObject>
@end
@interface UserModel : BaseDataModel
@property (copy, nonatomic, nullable) NSString<Optional> *name;
@property (strong, nonatomic, nullable) NSArray<ContactModel, Optional> *contacts;
@end
@implementation ContactModel
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithModelToJSONDictionary:@{
@"dataID": @"ID", // dataID用作ID
@"dataName": @"data" // dataName用作data
}];
}
@end
@implementation UserModel
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithModelToJSONDictionary:@{
@"dataID": @"ID", // dataID用作ID
@"dataName": @"nick" // dataName用作name
}];
}
@end
{% endcodeblock %}
<!--more-->
{% codeblock lang:objc %}
// Test
NSArray *array = @[@{@"ID": @57,
@"name": [NSNull null],
@"nick": @"Tony",
@"contacts": @[@{@"ID": @1,
@"data": @"example@mail.com"},
@{@"ID": @2,
@"data": @"136xxxxxxxx"},
@{@"ID": @3,
@"data": @"xx省xx市xx街道xx号"}]},
@{@"ID": @58,
@"name": @"Ming Wang",
@"nick": @"Jim",
@"contacts": @[@{@"ID": @1,
@"data": @"example@mail.com"},
@{@"ID": @2,
@"data": @"136xxxxxxxx"},
@{@"ID": @3,
@"data": @"xx省xx市xx街道xx号"}]},
@{@"ID": @59,
@"name": @"Li Yang",
@"nick": @"Sam",
@"contacts": @[@{@"ID": @1,
@"data": @"example@mail.com"},
@{@"ID": @2,
@"data": @"136xxxxxxxx"},
@{@"ID": @3,
@"data": @"xx省xx市xx街道xx号"}]}];
if ([MDB_TOOL canOpen_mdb] && ![MDB_TOOL tableExistsWithModel:[UserModel class]]) {
for (NSDictionary *dictionary in array) {
NSError *error;
UserModel *model = [[UserModel alloc] initWithDictionary:dictionary error:&error];
if (model) {
[MDB_TOOL parserSQL:model finish:nil]; // 存入 UserModel
}
}
[MDB_TOOL close_mdb];
LOG_FORMAT(@"[******]Write to database success.[******]");
} else {
if ([MDB_TOOL canOpen_mdb]) {
[MDB_TOOL parserModel:[UserModel class] finish:^(NSArray *_Nonnull model_array) { // 一次性取出所有的 UserModel
LOG_FORMAT(@"User models: %@", model_array);
}];
}
[MDB_TOOL close_mdb];
LOG_FORMAT(@"[******]Read from database success.[******]");
}
相关
- 详见极致框架官网EFFMDBTool/EFFMDBTool.h的介绍。通过极致框架官网顶部的搜索功能搜索 EFFMDBTool。
许可
- 本文采用 BY-NC-SA 许可协议。即:署名——转载请注明出处;非商业使用;相同方式传播——再分发的文章许可与原文相同。