简单又好用的iOS数据库存储框架

    xiaoxiao2021-03-25  98

    iOS database framework based on sqlite3(基于sqlite3的iOS数据库存储框架)

    在iOS开发中,如果使用到数据库来存储数据,使用的比较多的是FMDB或者CoreData,或者直接使用sqlite3。但是各种配置比较麻烦,或者需要自己写sql语句。我就想存个对象,要这么麻烦吗?所以GYDB出现啦,使用起来简单方便,类似存储对象的操作只要写:

    [obj gy_insert];

    就能插入一条数据到表中。觉得不错的话可以在github上星一下。

    GitHub: https://github.com/ygyalone

    Feedback: ygy9916730@163.com

    遇到问题欢迎issue或者邮件,感谢使用GYDB.

    描述(description)

    1.采用分类的模式,方便基于NSObject的类或者对象的数据库操作.

    2.关于线程安全:所有数据库操作都放在一个并发量为1的操作队列中,保证多线程使用的安全.

    3.支持的数据类型有:

    char, unsigned char, short, unsigned short, int, unsigned int.long, unsigned long, long long, unsingned long long, float, double.NSString.NSNumber.NSDate.NSData.

    目录(index)

    安装(install)基本配置(config)表操作(table operate)插入(insert)删除(delete)查询(query)修改(update)保存(save)其它操作(other)链式条件配置(condition)

    安装(install)

    pod 'GYDB'

    如果没有搜索到GYDB,请删除本地缓存后更新podSpec:

    rm -rf ~/Library/Caches/CocoaPods pod repo update

    注意:不使用pod安装的小伙伴需要手动添加libsqlite3.tbd的依赖

    基本配置(config)

    通用配置

    是否开启日志(默认开启):

    //关闭日志 DBManager.openLog = NO;

    设置异步回调时的队列,默认为manager的异步队列

    //设置在主线程中回调block DBManager.completionQueue = dispatch_get_main_queue();

    打开(创建)数据库:默认会打开(创建)Documents/gydb/gydb.sqlite路径下的数据库

    [DBManager openDatabase:dbPath];

    关闭数据库

    [DBManager closeDatabase:dbPath];

    存储配置

    自定义主键值

    - (NSString *)gy_customPrimaryKeyValue { return @"456"; }

    自定义对象关联(返回自定义对象属性的类型)

    + (NSDictionary<NSString *,Class> *)gy_customClass { return @{@"bestFriend":[Person class], @"favoritePet":[Pet class]}; }

    对象数组关联(返回数组中元素的类型,不管是自定义类型还是支持的NS类型,都需要返回)

    + (NSDictionary<NSString *,Class> *)gy_classInArray { return @{@"nickNames":[NSString class], @"favoriteNums":[NSNumber class], @"favoriteDates":[NSDate class], @"privateDatas":[NSData class], @"pets1":[Pet class], @"pets2":[Pet class]}; }

    表操作(table operate)

    检查表是否存在

    BOOL exist = [Person gy_tableExistsWithError:nil];

    创建表

    [Person gy_createTable];

    删除表

    [Person gy_dropTable];

    更新表(只增加旧表没有的字段)

    [Person gy_updateTable];

    插入(insert)

    插入单条数据

    同步方法:

    [person gy_insert];

    异步方法:

    [person gy_insertWithCompletion:^(GYDBError *error) { if (error) { //succeed }else { //failed } }];

    插入多条数据

    同步方法:

    GYDBError *error = [[GYDatabaseManager sharedManager] insertObjs:persons];

    异步方法:

    [DBManager insertObjs:persons completion:^(GYDBError *error) { }];

    删除(delete)

    根据对象删除

    同步方法:

    [person gy_delete];

    异步方法:

    [person gy_deleteWithCompletion:^(GYDBError *error) { }];

    根据类删除

    同步方法:

    //删除Person表中所有数据 [Person gy_deleteAll] //删除Person表中age小于79的行 [Person gy_deleteObjsWithCondition:DBCondition.Where_P(age).Lt(@79)];

    异步方法:

    //删除Person表中所有的行 [Person gy_deleteAllWithCompletion:^(GYDBError *error) { }]; //删除Person表中height大于等于100的行 [Person gy_deleteObjsWithCondition:DBCondition.Where_P(height).GtOrEq(@100) completion:^(GYDBError *error) { }];

    查询(query)

    同步方法:

    //查询Person表中主键大于456的行,根据age逆序排序 [Person gy_queryObjsWithCondition:DBCondition.Where_PK().Gt(@"456").OrderBy_P(age).Descending() error:&error];

    异步方法:

    //查询Person表中所有的行 [Person gy_queryObjsWithCondition:nil completion:^(NSArray *result, GYDBError *error) { }];

    修改(update)

    同步方法:

    //更新除age之外的所有属性 [person gy_updateWithExcludeColumns:@[@"age"]];

    异步方法:

    //更新所有属性 [person gy_updateWithExcludeColumns:nil completion:^(GYDBError *error) { }];

    保存(save)

    如果对象未入库,save方法等于insert方法.否则等于update方法.

    同步方法:

    [obj gy_save];

    异步方法:

    [obj gy_saveWithCompletion:^(GYDBError *error) { }];

    其它操作(other)

    获取当前打开的数据库路径,没有则返回nil

    DBManager.databasePath;

    获取表中数据行数

    //查询Person表中的数据行数 NSInteger rowCount1 = [Person gy_countWithCondition:nil error:&error]; //查询Person表中age大于等于24的数据行数 NSInteger rowCount2 = [Person gy_countWithCondition:DBCondition.Where_P(age).GtOrEq(@24) error:&error];

    链式条件配置(condition)

    使用链式语法能够方便地配置执行Sql操作时的条件.举例:

    //查询name以Alone结尾或者age大于等于24,根据age降序排序的从索引0开始的10条数据... [Person gy_queryObjsWithCondition:DBCondition.Where_P(name).Like(@"%Alone").Or_P(age).GtOrEq(@24).OrderBy_P(age).Descending().Limit(0,10) error:&error]

    详细说明见下表:

    条件说明举例参数类型Where筛选条件.传入属性名.Where(@”age”):根据age筛选NSString *Where_P筛选条件.和Where相同,会自动匹配selector,方便输入.Where_P(age):根据age筛选NSString *Where_PK筛选条件.匹配主键,等价Where(@”_id”).Where_PK():根据主键筛选voidEq比较条件.相等.Where_P(age).Eq(@24):age等于24NSString * NSNumber *Nq比较条件.不相等.Where_P(name).Nq(@”ygy”):name不等于ygyNSString * NSNumber *Lt比较条件.小于.Where_P(age).Lt(@24):age小于24NSString * NSNumber *Gt比较条件.大于.Where_P(age).Gt(@24):age大于24NSString * NSNumber *LtOrEq比较条件.小于等于.Where_P(age).LtOrEq(@24):age小于等于24NSString * NSNumber *GtOrEq比较条件.大于等于.Where_P(age).GtOrEq(@24):age大a于等于24NSString * NSNumber *Like通配符筛选条件.Where_P(name).Like(@”%Alone”):根据通配符’%Alone’查询NSString *And与条件.Where_P(name).Like(@”%Alone”).And(@”age”).Gt(@17):name满足通配符匹配,并且age大于17NSString *And_P与条件.和And相同,会自动匹配selector,方便输入.Where_P(name).Like(@”%Alone”).And_P(age).Gt(@17):name满足通配符匹配,并且age大于17NSString *Or或条件.Where_P(name).Like(@”%Alone”).Or(@”age”).Gt(@24):name满足通配符匹配,或者age大于24NSString *Or_P或条件.和Or相同,会自动匹配selector,方便输入.Where_P(name).Like(@”%Alone”).Or(@”age”).Gt(@24):name满足通配符匹配,或者age大于24NSString *OrderBy排序条件.OrderBy(age):根据age排序,默认为升序排序NSString *OrderBy_P排序条件,和OrderBy相同,会自动匹配selector,方便输入.OrderBy(age):根据age排序,默认为升序排序NSString *Ascending升序排序条件OrderBy_P(age).Ascending():根据age升序排序voidDescending降序排序条件OrderBy_P(age).Descending():根据age降序排序voidLimit数量限制条件Limit(0,10):结果集合中从索引0开始的10条数据NSInteger(offset) NSInteger(len)

    更多详细介绍请参考NSObject+GYDB.h和GYDatabaseManager.h

    转载请注明原文地址: https://ju.6miu.com/read-17428.html

    最新回复(0)