ReflectionDatabase 1.1

ReflectionDatabase 1.1

João Gabriel Silva Marra维护。



  • JoaoMarra

ReflectionDao

使用反射编写在Objective C上的iOS SQLite库。其核心思想是简化DAO类的创建,并且无需复杂的配置

如何使用

以下是一些使用示例中的DAO类示例

//PersonModel.h
@interface PersonModel : DaoModel

@property(nonatomic, strong) NSString *rg;
@property(nonatomic, strong) NSString *name;
@property(nonatomic) int age;
@property(nonatomic, strong) NSDate *birth;

@end

//PersonModel.m
@implementation PersonModel

-(NSString *)primaryKeyName {
    return @"rg";
}

@end

//AddressModel.h
@interface AddressModel : DaoModel

@property(nonatomic, strong) NSString *rgPerson;
@property(nonatomic, strong) NSString *stringAddress;

@end

@-(NSString *)primaryKeyName 返回表示表主键的属性名称。如果您没有指定,则库将创建一个默认的Number id,可以通过-(id)primaryKeyValue-(NSString *)primaryKeyName方法访问该列名称。

要初始化您的数据库,请使用来自DBManager类的DBManagerDelegate+(void)initDB:(id<DBManagerDelegate>)delegate

@interface AppDelegate ()<DBManagerDelegate>

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [DBManager initDB:self];
    return YES;
}

...

#pragma mark - DBManagerDelegate methods

//return db scheme version
-(int)dbSchemeVersion {
    return 1;
}
//return an array of Dao Classes
-(NSArray<Class> *)dbDaoClasses {
    return @[PersonModel.class, AddressModel.class];
}

//do something after create or update db - @optional
-(void)dbPostCreationOrUpdate {

}

删除、创建和修改表都由库管理。

使用示例

您可以直接从模型类或使用查询类使用库。以下是一些示例

    PersonModel *person = [PersonModel new];
    person.rg = @"rg";
    person.name = @"Pedro";
    person.age = 16;
    person.birth = [NSDate new];
    [person insertModel];
    
    AddressModel *address = [AddressModel new];
    address.rgPerson = @"rg";
    address.stringAddress = @"somewhere";
    [address insertModel];
    
    ...
    
    [person delete]; //delete the person

使用查询类查询

    NSArray<AddressModel *> *addresses = [[[[Select from:AddressModel.class]
                                            where:@"rgPerson" value:@"rg" comparation:EQUAL]
                                            orderBy:DEFAULT_PRIMARY_KEY order:DESCENDING]
                                            limit:5].execute;
                                    
    ...
    
    int del = [Delete from:PersonModel.class].execute;