BRORM 0.5

BRORM 0.5

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最新版本2014年12月

brototyp 维护。



BRORM 0.5

  • 作者
  • Cornelius Horstmann

另一个 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
  • 默认情况下,idColumnidentifier。如果您要更改它,请重写 + (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];

关系

  • HasOneOrMany
BROrmWrapper *w = [BROrmWrapper factoryForClassName:@"Person"];
Person *t = (Person*)[w findOne:@"1"];
NSArray *customer = [[t hasOneOrMany:@"Customer"] findMany];
  • hasAndBelongsToMany
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];

按组归组 & Having

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];

待办事项

  • 编写更好的文档