项目介绍:
YIIFMDB的github地址(支持Cocoapods,给个Star)
YIIFMDB的blog地址
YIIFMDB是基于FMDB的进一步封装,可以直接将Model的数据存入数据库,并且在绝大部分情况下不需要写sql语句,只需要执行几个方法就行。
简单例子如下:
创建表:
// 基于Model创建一张表
YIIFMDB *db = [YIIFMDB shareDatabase];
[db createTableWithModelClass:[LCVideoModel class] excludedProperties:nil tableName:tableName];
插入数据:
// 基于Model对象插入数据库
LCVideoModel *model = [[LCVideoModel alloc] init];
model.name = [NSString stringWithFormat:@"lc%d", (arc4random() % 100)];
model.gender = arc4random() % 2;
model.age = arc4random() % 80;
model.floatNumber = (arc4random() % 20) / 100.0;
model.doubleNumber = (arc4random() % 20) / 100.0;
model.isMan = arc4random() % 2;
model.number = @(arc4random() % 10);
YIIFMDB *db = [YIIFMDB shareDatabase];
BOOL isSuccess = [db insertWithModel:model tableName:tableName];
删除一条数据:
YIIFMDB *db = [YIIFMDB shareDatabase];
YIIParameters *parameters = [[YIIParameters alloc] init];
// db.primaryKey 是数据库的主键,这条语句意思是删除主键 = 1的那条数据
[parameters andWhere:db.primaryKey value:@"1" relationType:YIIParametersRelationTypeEqualTo];
BOOL isSuccess = [db deleteFromTable:tableName whereParameters:parameters];
更改一条数据:
YIIFMDB *db = [YIIFMDB shareDatabase];
YIIParameters *parameters = [[YIIParameters alloc] init];
// 找到主键 = 10的那条数据
[parameters andWhere:db.primaryKey value:@"10" relationType:YIIParametersRelationTypeEqualTo];
// 将主键为10的那条数据的name 设置为 monkey
BOOL isSuccess = [db updateTable:tableName dictionary:@{@"name": @"monkey"} whereParameters:parameters];
查询数据:
YIIFMDB *db = [YIIFMDB shareDatabase];
YIIParameters *parameters = [[YIIParameters alloc] init];
// 获取到主键 < 5的那些值
[parameters andWhere:db.primaryKey value:@"5" relationType:YIIParametersRelationTypeLessThan];
NSLog(@"主键值小于5的所有数据:%@", [db queryFromTable:tableName model:[LCVideoModel class] whereParameters:parameters]);
除此之外,YIIFMDB还提供了添加一个字段,表是否存在,获取表中符合条件的个数,求和,最大值,平均值,最小值等。除此之外,YIIFMDB还提供了数据库安全操作,用法是:
队列:
YIIFMDB *db = [YIIFMDB shareDatabase];
[db inDatabase:^{
// 增删改查放在此代码块里执行则可以保证线程安全
}];
事务:
YIIFMDB *db = [YIIFMDB shareDatabase];
[db inTransaction:^(BOOL *rollback) {
// 如果某一个操作失误,则可以执行回滚操作
BOOL isSuccess = YES; // 数据库操作是否操作成功
if (!isSuccess) {
*rollback = YES;
return ;
}
}];