iOS Developer

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 使用注意

模型需要一个主键或自增主键

上一篇下一篇

猜你喜欢

热点阅读