Latest 0.0.1
Homepage https://github.com/rztime/RZFMDB
License MIT
Platforms ios 8.0
Dependencies MJExtension, FMDB
Authors

关于FMDB

对FMDB的封装,以Model的形式,一行代码进行增删改查,Model的属性可以为任意类型(字符串,整型,浮点型等,NSArray , NSArray <NSOBject > ,NSObject ,NSDictionary *,NSData, NSDate等等)。
当Model中嵌套多层次的数组、模型数组、字典数组等等,会加大消耗,所以尽量只包含字符串浮点型等等不包含嵌套和数组的属性,可以提高运行效率

使用

    pod 'RZFMDB'
创建一个Model,将需要创建数据表的字段作为Model的属性,将自动建表,Model属性列表第一个为 NSInteger 或 int, 将作为数据表的主键 PRIMARY KEY

在Model中添加头文件

#import "NSObject+RZFMDBHelper.h"
  • 1 创建表
    
    /**
    创建数据库 可以在Model的 +(void)load 中调用

@return YES:创建成果
*/

  • (BOOL)rz_createdDBTable;
  • 2 表字段的处理
    
    /**
    所有的列  默认将把Model中所有的数据(除block,未知类型,和[rz_tableInsertIgnoreColumns]忽略的数据)作为表的列,数组第一个为主键

@return <#return value description#>
*/

  • (NSMutableArray <NSString > )rz_tableAllColumns;

/**
需要插入的列 (没有主键)

@return 需要插入的列,默认是没有主键的
*/

  • (NSMutableArray <NSString > )rz_tableInsertColumns;

/**
插入时,需要忽略的列

@return ..
*/

  • (NSMutableArray <NSString > )rz_tableInsertIgnoreColumns;
#### 备注:如果在Model中重写上述方法一个或多个,将按照配置取数据创建表、以及插入数据表,如果不重写,将默认以Model中所有的属性作为插入表的列依据

```objc
/**
需要更新的列 (没有主键)

@return 需要插入的列,默认是没有主键的
*/
+ (NSMutableArray <NSString *> *)rz_tableUpdateColumns;

/**
需要更新时,忽略的列  (没有主键)

@return ..
*/
+ (NSMutableArray <NSString *> *)rz_tableUpdateIgnoreColumns;

备注:如果在Model中重写上述方法,将按照配置来取数据字段已更新数据库,如果不重写,则默认更新所有的数据

在插入、更新时,都将调用

/**
将要增改时,调用此方法,如需使用,在Model中重写
*/
- (void)rz_willInsertOrUpdaate;

增删改查处理

  • 请用Model或Model的实例,调用方法,因为会使用MJExtension将Model转换为字典,或将字典还原回Model
    
    /**
    插入数据 插入成功后,会将主键值赋值回来

@return ..
*/

  • (BOOL)rz_insertDataToDBTable;

/**
批量插入数据 插入成功后,会将主键值赋值回来

@param models 数据模型
@return ..
*/

  • (BOOL)rz_insertDataToDBTableByMultiData:(NSArray *)models;

/**
修改数据

@return …
*/

  • (BOOL)rz_updateDataToDBTable;

/**
删除数据

@return <#return value description#>
*/

  • (BOOL)rz_deleteDataFromDBTable;
    /**
    通过条件删除 格式 (culumn1 = value1 and culumn2 = value2 and …) 为nil时,删除全部全部

@param condition <#condition description#>
@return <#return value description#>
*/

  • (BOOL)rz_deleteDataFromDBTableByCondition:(NSString *)condition;
    /**
    查询所有数据

@return ..
*/

  • (NSMutableArray *)rz_queryDataFromDBTable;

/**
通过条件查询 格式 (culumn1 = value1 and culumn2 = value2 and …) 为nil时,查询全部

@param condition <#condition description#>
@return <#return value description#>
*/

  • (NSMutableArray )rz_queryDataFromDBTableByCondition:(NSString )condition;

最后

Model中可以层层嵌套多种数据(数组,字典、NSObject(NSObject中还可以嵌套)),最后查询完会通过MJExtension还原回对应的Model,如果有嵌套的数组,请配置[+ (NSDictionary *)mj_objectClassInArray]方法

提示,Model中嵌套数据过多时,批量插入如10000条,将会非常耗时,通过测试【模拟器上】,层层嵌套式【#if 1】批量插入耗时32秒,当只有常规数据【#if 0】插入时,只耗时1秒,差距非常大,所以请尽量不要嵌套

测试代码


- (RZFMDBTestModel *)lazayModel {
    RZFMDBTestModel *model = [[RZFMDBTestModel alloc] init];

    model.rzNSInt = 1;
    model.rzfloat = 1.1;
    model.rzdouble = 1.1111;
    model.rzNo = @(2);
    model.rzBool = YES;
    model.rzName = @"rztime";
    model.rzName1 = @"rztime1";
    model.rzName2 = @"rztime2";
    model.rzName3 = @"rztime3";
    model.rzName4 = @"rztime4";
    model.rzName5 = @"rztime5";
    model.rzName6 = @"rztime6";
#if 0
    model.rzArray = @[@"数组1"];
    model.rzNSMutableArray = @[@"数组2", @"数组2"].mutableCopy;
    model.date = [NSDate new];
    model.data = UIImagePNGRepresentation([UIImage imageNamed:@"test"]);
    model.rzBlock = ^(NSInteger text) {
        NSLog(@"block");
    };
    RZFMDBTestModel *temp = [[RZFMDBTestModel alloc] init];
    model.rzObjc = temp;
    NSMutableArray *array = [NSMutableArray new];
    for (NSInteger i = 0; i < 5; i++) {
        RZFMDBTestModel *temp = [[RZFMDBTestModel alloc] init];
        temp.date = [NSDate new];

        NSMutableArray *temarray = [NSMutableArray new];
        for (NSInteger i = 0; i < 5; i++) {
            RZFMDBTestModel *temp1 = [[RZFMDBTestModel alloc] init];
            temp1.date = [NSDate new];
            [temarray addObject:temp1];
        }
        temp.rzObjcs = temarray.mutableCopy;

        [array addObject:temp];
    }
    model.rzObjcs = array.mutableCopy;
#endif
    return model;
}

Latest podspec

{
    "name": "RZFMDB",
    "version": "0.0.1",
    "summary": "u5bf9FMDBu7684u5c01u88c5uff0cu4ee5Modelu7684u5f62u5f0fuff0cu4e00u884cu4ee3u7801u8fdbu884cu589eu5220u6539u67e5",
    "description": "u5bf9FMDBu7684u5c01u88c5uff0cu4ee5Modelu7684u5f62u5f0fuff0cu4e00u884cu4ee3u7801u8fdbu884cu589eu5220u6539u67e5uff0cModelu7684u5c5eu6027u53efu4ee5u4e3au4efbu610fu7c7bu578buff08u5b57u7b26u4e32uff0cu6574u578buff0cu6d6eu70b9u578bu7b49uff0cNSArray *, NSArray  *uff0cNSObject *uff0cNSDictionary *uff0cNSData, NSDateu7b49u7b49uff09u3002nu5f53Modelu4e2du5d4cu5957u591au5c42u6b21u7684u6570u7ec4u3001u6a21u578bu6570u7ec4u3001u5b57u5178u6570u7ec4u7b49u7b49uff0cu4f1au52a0u5927u6d88u8017uff0cu6240u4ee5u5c3du91cfu53eau5305u542bu5b57u7b26u4e32u6d6eu70b9u578bu7b49u7b49u4e0du5305u542bu5d4cu5957u548cu6570u7ec4u7684u5c5eu6027uff0cu53efu4ee5u63d0u9ad8u8fd0u884cu6548u7387",
    "homepage": "https://github.com/rztime/RZFMDB",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "rztime": "[email protected]"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/rztime/RZFMDB.git",
        "tag": "0.0.1"
    },
    "source_files": "RZFMDB/Core/*.{h,m}",
    "dependencies": {
        "MJExtension": [],
        "FMDB": []
    },
    "prefix_header_contents": "#import n#import "
}

Pin It on Pinterest

Share This