iOS 数据库模型映射。DatabaseMapping. dat
2017-06-04 本文已影响110人
changsanjiang
工程地址: https://github.com/changsanjiang/SJDBMap
Object To Database Map.
pod 'SJDBMap' (Please perform " pod update --no-repo-update ")
根据模型自动创建与该类相关的表(多个表), 可以进行增删改查. 当类添加了新的属性的时候, 会自动更新相关的表字段.
Use
实现协议方法.
Imp SJDBMapUseProtocol Method.
@interface SampleVideoModel : NSObject<SJDBMapUseProtocol>
@property (nonatomic, assign) NSInteger videoId;
@property (nonatomic, strong) NSArray<SampleVideoTag *> *tags;
@property (nonatomic, strong) NSArray<SampleUser *> *likedUsers;
@property (nonatomic, strong) SampleOrgan *organ;
@end
@implementation SampleVideoModel
+ (NSString *)primaryKey {
return @"videoId";
}
// model
+ (NSDictionary<NSString *,NSString *> *)correspondingKeys {
return @{
@"organ":@"code",
};
}
// arr
+ (NSDictionary<NSString *,Class> *)arrayCorrespondingKeys {
return @{
@"tags":[SampleVideoTag class],
@"likedUsers":[SampleUser class],
};
}
@end
insertOrUpdate 插入数据或更新数据
数据在插入表之前, 会检测是否已经存在相关表。如果不存在,会先创建相关表(可能会创建多个表), 再进行数据的更新或插入。
如果类中新添了属性, 会自动检测并更新相关表字段。
- (void)insertOrUpdate {
Person *sj = [Person new];
sj.personID = 0;
sj.name = @"sj";
sj.tags = @[[PersonTag tagWithID:0 des:@"A"],
[PersonTag tagWithID:1 des:@"B"],
[PersonTag tagWithID:2 des:@"C"],
[PersonTag tagWithID:3 des:@"D"],
[PersonTag tagWithID:4 des:@"E"],];
[[SJDBMap sharedServer] insertOrUpdateDataWithModel:sj callBlock:^(BOOL result) {
// ....
}];
}
- (void)update {
[[SJDatabaseMap sharedServer] update:person property:@[@"tags", @"age"] callBlock:^(BOOL result) {
// ....
}];
[[SJDatabaseMap sharedServer] update:person insertedOrUpdatedValues:@{@"tags":insertedValues} callBlock:^(BOOL r) {
// ....
}];
}
delete 删除
删除数据是删除该类对应的表的数据, 与其关联的其他类的数据没有做处理。
- (void)del {
[[SJDBMap sharedServer] deleteDataWithClass:[Person class] primaryValue:0 callBlock:^(BOOL result) {
// ...
}];
[[SJDatabaseMap sharedServer] deleteDataWithClass:[Person class] primaryValues:@[@(1), @(0)] callBlock:^(BOOL r) {
// ...
}];
[[SJDatabaseMap sharedServer] deleteDataWithModels:personModels callBlock:^(BOOL result) {
// ...
}];
}
query 查询
查询数据会将与该类相关的所有数据都读取出来, 并转换相应的模型。
- (void)query {
[[SJDBMap sharedServer] queryAllDataWithClass:[Person class] completeCallBlock:^(NSArray<id> * _Nonnull data) {
// ...
}];
[[SJDatabaseMap sharedServer] queryDataWithClass:[Person class] primaryValue:12 completeCallBlock:^(id<SJDBMapUseProtocol> _Nullable model) {
// ...
}];
[[SJDatabaseMap sharedServer] queryDataWithClass:[Person class] queryDict:@{@"name":@"sj", @"age":@(20)} completeCallBlock:^(NSArray<id<SJDBMapUseProtocol>> * _Nullable data) {
// ...
}];
[[SJDatabaseMap sharedServer] queryDataWithClass:[Person class] range:NSMakeRange(2, 10) completeCallBlock:^(NSArray<id<SJDBMapUseProtocol>> * _Nullable data) {
// ...
}];
}
// 模糊查询
- (void)fuzzyQuery {
// 匹配以 's' 开头的name.
[[SJDatabaseMap sharedServer] fuzzyQueryDataWithClass:[Person class] queryDict:@{@"name":@"s"} match:SJDatabaseMapFuzzyMatchFront completeCallBlock:^(NSArray<id<SJDBMapUseProtocol>> * _Nullable data) {
// ...
}];
* 匹配左右两边
* ...A...
*/
SJDatabaseMapFuzzyMatchAll = 0,
/*!
* 匹配以什么开头
* ABC.....
*/
SJDatabaseMapFuzzyMatchFront,
/*!
* 匹配以什么结尾
* ...DEF
*/
SJDatabaseMapFuzzyMatchLater
}
Use attention 使用注意
模型需要一个主键或自增主键