美文网首页iOS Developer
iOS 数据库模型映射。DatabaseMapping. dat

iOS 数据库模型映射。DatabaseMapping. dat

作者: changsanjiang | 来源:发表于2017-06-04 22:45 被阅读110次

    工程地址: 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 使用注意

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

    相关文章

      网友评论

        本文标题:iOS 数据库模型映射。DatabaseMapping. dat

        本文链接:https://www.haomeiwen.com/subject/wtmbfxtx.html