FOMapping 1.0.3

FOMapping 1.0.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最新版本2016年12月

Ben YF Chen 维护。



FOMapping 1.0.3

  • 作者:
  • Ben YF Chen

FOMapping 是 c.cgus 的 SQLite Objective-C 封装 FMDB 的简单 ORM(对象关系映射)扩展。《FMDB 很棒,但是拥有一些代表我们在数据库中所拥有的对象实例会更方便。

测试状态

当我在处理 SQLite 时,使用此项目开发我的 iOS 应用。如果您遇到任何问题,请让我知道。

需求

表格到对象映射

假设你有一个名为 Batter 的表格,记录一些棒球运动员的击打数据。

CREATE TABLE batter (
    name        TEXT NOT NULL,
    avg         REAL,
    hr          INTEGER,
    birth       REAL,
    position    BLOB,
    PRIMARY KEY(name)
);

然后您只需创建一个继承自 FOObject 类的类。

#import "FOObject.h"

@interface Batter : FOObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) double avg;
@property (nonatomic, assign) NSInteger hr;
@property (nonatomic) NSData *birth;
@property (nonatomic) NSData *position;

@end

并确保以下操作发生:

  1. 表必须有至少一个主键,用于更新或删除特定的行。
  2. 重写 +tableName; 类方法以指定相应的表。

属性类型

  • NSInteger 代表 SQLite 中的 INTEGER
  • double 代表 SQLite 中的 REAL
  • NSString 代表 SQLite 中的 TEXT
  • NSData 代表 SQLite 中的 BLOB
  • NSDate 代表在 SQLite 中表示日期的数据,可以是
    1. REAL,自 1970-01-01 00:00:00 UTC 以来秒数
    2. TEXT,符合 FMDatabase 的日期格式化程序

查询、更新和删除

FMResultSet *rs = [db executeQuery:@"SELECT * from batter"];
while ([rs next]) {

    Batter *batter = [Batter objectWithResultSet:rs];

    if ([batter.name isEqualToString:@"Lin"]) {

        batter.avg = 0.300;
        batter.hr = 20;
        batter.birth = [NSDate dateWithTimeIntervalSinceNow:500515200];
        break;
    }
    else if ([batter.name isEqualToString:@"Hu"]) {

        [batter remove:db];    
        break;
    }
}

插入

Batter *newBatter = [[Batter alloc] init];
newBatter.name = @"Kao";
newBatter.avg = 0.35;
newBatter.hr = 30;
newBatter.birth = [NSDate dateWithTimeIntervalSinceNow:496540800];
[newBatter save:db];

保留临时查询

有时我们需要存储一个没有对应类的临时查询结果。这时可以使用 NSDictionary。

FMResultSet *rs = [db executeQuery:@"select name as name1, avg as avg1, hr as hr1 from batter;"];
NSArray *results = [[NSMutableArray allolc] init];
while ([rs next]) {

    [results addObject:[FOObject dictionaryWithResultSet:rs]];
}

这就完成了。很高兴您投入了宝贵的时间。