OLCOrm 是一个轻量级的 iOS 对象关系映射(ORM)库
基本上有两种方法可以将此库集成到您的项目中。简单的方法或困难的方法 ;)
要使用 CocoaPods 将 OLCOrm 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod "OLCOrm"
下载并将 OLCOrm/Pod/Classes/
下的库文件添加到您的项目中。在您的项目中将它们放在类似 lib/OLCOrm
的位置。
要初始化您的数据库,首先将库的 umbrella header 文件导入到您的 AppDelegate 类中,或您想初始化数据库的任何其他位置(建议在 AppDelegate 中执行此操作)
#import "OLCOrm.h"
然后通过以下调用初始化数据库
OLCOrm *db = [OLCOrm databaseName:@"db-name.sqlite" version:[NSNumber numberWithInt:1] enableDebug:NO];
此命令将为您的项目创建 SQLite 数据库文件。在此 databaseName:
让库知道数据库文件的名称。 version:
设置数据库版本(记得在添加/更改模型类时增加此版本)。 enableDebug:
启用此功能将在您的 xcode 控制台中记录所有数据库操作。
为了使库与您的模型类一起工作,您需要用 OLCModel
类扩展您的模型(s)。
首先,使用以下内容将 OLCModel 导入到您的模型中
#import "OLCModel.h"
然后扩展如下
@interface MyModel : OLCModel
在您的 AppDelegate 或初始化数据库的任何位置调用以下命令来在您的数据库中注册模型
[db makeTable:[MyCustomModel class]];
[db makeTable:[UserObject class] withMigration:NO];
以这种方式注册模型将告诉库忽略迁移并创建一个空表
[db makeTable:[UserObject class] withTableVersion:2 withMigration:NO];
如果您不希望更新数据库版本,只更新Model类的表结构,请以此方式注册模型
以下示例将指导您如何使用库执行创建/读取/更新/删除操作
要创建一个表记录,只需在模型上调用save
命令。如果插入成功,它将返回YES
和失败时的NO
。
示例
TestObject *test = [[TestObject alloc] init];
test.title = [NSString stringWithFormat:@"Sample Record %d", [records count]];
test.coordinates = [NSNumber numberWithDouble:234.345345];
test.currency = [NSNumber numberWithFloat:150.00];
test.flag = [NSNumber numberWithInt:1];
test.addAt = [NSDate date];
test.link = [NSURL URLWithString:@"http://google.com"];
test.status = [NSNumber numberWithInt:1];
...
return [test save];
调用[test saveAndGetId]
将返回插入记录的Id(主键)同时在数据库中保存数据。返回-1
表示插入失败。
在您的模型上调用update
来更新当前模型数据。方法将成功时返回YES
或失败时返回NO
。
示例
[test update];
您的模型上调用delete
将从数据库中永久删除记录。方法将成功时返回YES
或失败时返回NO
。
[test delete];
要检索与特定模型类相关的所有记录,请调用您的模型类上的静态方法all
。
示例
NSArray *allRecords = [TestObject all];
调用模型类上的静态方法find
以通过其主键字段查找特定记录。
示例
[TestObject find:@1]
在您的模型类上调用静态方法whereColumn:(NSString *) column byOperator:(NSString *) opt forValue:(NSString *) value accending:(BOOL) sort
。
示例
[TestObject whereColumn:@"link" byOperator:@"=" forValue:@"http://google.com" accending:YES]
示例
[TestObject where:@"flag = 1 AND link != 'enabled'" sortBy:@"title" accending:NO];
做你想做的... 但!确保你拼写表名正确。它应该是你的Model类名。
示例
[TestObject query:@"SELECT * FROM myTable WHERE STATUS = 1"]
哦哦...
[self hasOne:<Model class> foreignKey:<Foreign Key>]
示例
[test hasOne:[UserObject class] foreignKey:@"userId"]
或者
[test belongTo:[UserObject class] foreignKey:@"userId"]
[self hasMany:<Model class> foreignKey:<Foreign Key>];
示例
[user hasMany:[TestObject class] foreignKey:@"userId"];
为了简单起见,我删除了它。嗯...你得自己想出来。走开。这里没有支持,伙计。
您可以通过覆盖 + (NSString *) primaryKey
方法来指定对象的键属性,并返回您想要的键,默认设置为 Id
+ (NSString *) primaryKey
{
return @"CustomPrimaryKey";
}
如果您想要那些不需要保存到数据库但在运行时需要的属性,不用担心。通过覆盖 + (NSArray *) ignoredProperties
方法并返回属性名称的数组来忽略这些属性。
+ (NSArray *) ignoredProperties
{
return @[@"status", @"timer"];
}
要为特定对象启用调试模式,可以覆盖 + (BOOL) debug
方法并返回 YES 以启用它,默认设置为 NO;
+ (BOOL) debug
{
return YES;
}
您可以在 OLCOrm 上注册本地通知来监控数据库更改。通过在特定模型上注册通知,可以监控该模型上的创建/更新/删除操作。
注册方法
[TestObject notifyOnChanges:self withMethod:@selector(testObjNotificationListner:)];
注销方法
[TestObject removeNotifyer:self];
人人欢迎!
Lakitha Samarasinghe, [email protected]
版权 2015 Lakitha Samarasinghe
根据 Apache 许可证,版本 2.0(“许可证”);除非根据许可证明示许可,否则不得使用此文件。您可以在以下位置获取许可证的副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律规定或书面同意,否则在许可证下分发的软件按“原样”基础提供,不提供任何明示或暗示的保证或条件。请参阅许可证以了解管理许可证权限和限制的具体语言。
我们都知道与 Core Data 一起工作是非常痛苦的事情。但如果您了解它是如何实际工作的,那么它就相对容易一些,只需要使用模型类来动态更新数据库结构。
对于那些讨厌使用 Core Data 的人,FMDB 是您的最佳选择。但仍然它缺乏将对象映射到模型的能力。因此,您必须手动创建数据库和查询,啊。
因此,我开发了这个库作为 FMDB 的包装库,它处理数据库、表及我们日常使用的所有 CRUD 功能,以使您的生活更加容易。
编码愉快。