另一个 Objective-C SQLite ORM
您可以通过 Cocoapod 安装 BRORM
。只需将以下行添加到您的 Podfile。
pod 'BRORM', '~> 0.4'
我正在使用 FMDB 作为 SQLite 包装器。
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"database.sqlite"];
_databaseQueue = [FMDatabaseQueue databaseQueueWithPath:databasePath];
[BROrm setDefaultQueue:_databaseQueue];
添加您的数据库迁移。
[BROrm executeUpdate:@"CREATE TABLE IF NOT EXISTS default_class (identifier INTEGER PRIMARY KEY AUTOINCREMENT, string TEXT, int INTEGER, default_class_identifier INTEGER);" withArgumentsInArray:NULL];
为每个要使用的模型创建 BRModel 的子类。
tableName
是下划线首字母大写的类名。如果您要更改它,请重写 + (NSString*)getTableName
。idColumn
是 identifier
。如果您要更改它,请重写 + (NSString*)idColumn
。如果您想要全局更改表名和/或 ID 列,可以简单地对 BRModel
进行子类化,在其中重写它,然后为您的每个模型子类化子类。
@interface Person : BRModel
@end
@implementation BRTesttable
+ (NSString*)getTableName{
return @"person";
}
+ (NSString*)idColumn{
return @"id";
}
@end
要从数据库读取或写入数据,您必须使用具有模型类名的 BROrmWrapper。
查找多个 从数据库中选择多个结果。
w.limit
: 默认不限制w.tableAlias
: 默认与 tableName 相同w.distinct
: 默认不唯一BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
NSArray *persons = [w findMany];
查找单个 将查询的限制设置为 1 并返回结果。
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *person = (Person*)[w findOne];
通过 ID 查找单个
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *person = (Person*)[w findOne:@(2)];
计数
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
int personCount = [w count];
创建一个新对象。您可以将 NSDictionary 分配给 hydrate 数据,或在需要时更改数据。
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *p = [w create:@{@"prename":@"Jason",@"age":@(27)}];
p[@"surname"] = @"Keller";
BOOL success = [p save];
将数据分配给对象仅将其设置为 dirty(脏),如果它们已更改。save 方法仅懒保存更改的值。如果没有更改,则不会进行更新。
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *p = (Person*)[w findOne:@"2"];
[p setFromDictionary:@{@"street":@"Some Ave. 1234",@"city":@"somecity"}]
p[@"prename"] = @"Jason";
BOOL success = [p save];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *p = (Person*)[w findOne:@"2"];
BOOL success = [p destroy];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
[w whereEquals:@"prename" value:@"Jason"];
// [w whereNotEquals:@"prename" value:@"Jason"];
// [w whereLike:@"prename" value:@"Ja%"];
// [w whereNotLike:@"prename" value:@"Ja%"];
// [w whereIdIs:@(1)];
// [w whereRaw:@"`prename` = `Ja%`"]
NSArray *jasons = [w findMany];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *t = (Person*)[w findOne:@"1"];
NSArray *customer = [[t hasOneOrMany:@"Customer"] findMany];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *t = (Person*)[w findOne:@"1"];
NSArray *customer = [[t hasMany:@"Customer" through:@"customer_person" withForeignKey:@"customer_identifier" andBaseKey:@"person_identifier"] findMany];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
w.limit = @1;
NSArray *testentries = [w findMany];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
[w orderBy:@"int" withOrdering:@"ASC"];
w.limit = @1;
w.offset = @1;
NSArray *justOne = [w findMany];
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
[w select:@"prename" as:@"prename"];
[w select:@"count(*)" as:@"count"];
[w groupBy:@"prename"];
[w having:@"age > 21"];
NSArray *allOverTwentyoneByPrename = [w findMany];