什么是Realm
Realm是一个跨平台移动数据库引擎,支持iOS、OS X(Objective-C和Swift)以及Android,核心数据引擎C++打造,并不是建立在SQLite之上的ORM, 是拥有独立的数据库存储引擎。
- Realm 核心数据库引擎探秘
- 使用教程
- Realm Browser
- Xcode插件
(一)简单的数据操作
创建数据模型,
创建的数据模型必须继承自RLMObject
,可以通过initWithValue
快速创建
ps: 由于Realm 在自己的引擎内部有很好的语义解释系统,所以 Objective‑C 的许多属性特性将被忽略,如nonatomic, atomic, strong, copy 和 weak 等。 因此为了避免误解,官方推荐在编写数据模型的时候不要使用任何的属性特性。
@interface Person : RLMObject
@property int num;
@property NSString *name;
@property int age;
@end
// This protocol enables typed collections. i.e.:
// RLMArray<Person *><Person>
RLM_ARRAY_TYPE(Person)
写入方式
- 方式一
Person *person = [Person alloc]initWithValue:{@"name":@"张三",@"age":@18,@"num":@0}
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];//开启写入事务
[realm addObject:person];//添加模型对象
[realm commitWriteTransaction];//提交写入事务
- 方式二
[realm transactionWithBlock:^{
[realm addObject:stu];
}];
- 方式三
[Stu createInRealm:realm withValue:@{@"name":@"张三",@"age":@18,@"num":@0}];
更新指定模型
- 方式一:在事务中直接更新对象
[realm beginWriteTransaction];//开启写入事务
person.name = @"李四";
[realm commitWriteTransaction];//提交写入事务
- 方式二:根据主键进行更新
- 要求操作的模型, 必须实现方法
+ (NSString *)primaryKey
返回主键 - 在事务中调用方法
[realm addOrUpdateObject:person];
或者:
[Stu createInRealm:realm withValue:@{@"num": @12, @"name": @"李四", @"age": @666}];
删除数据
删除指定的对象
删除对象必须是从realm数据库中获取的模型对象, 而不是自己创建的
RLMObject *obj = [realm objectWithClassName:@"Stu" forPrimaryKey:@2];
[realm deleteObject:stu];
删除所有对象
[realm deleteAllObjects];
查询数据
- 所有的查询(包括查询和属性访问)在 Realm 中都是延迟加载的,只有当属性被访问时,才能够读取相应的数据
- 查询结果并不是数据的拷贝:修改查询结果(在写入事务中)会直接修改硬盘上的数据。
- 一旦检索执行之后, RLMResults 将随时保持更新
查询所有
[Person allObjects]
条件查询
RLMResults<Person *> *persons = [Stu objectsWhere:@"name = '李四'"];
排序
[persons sortedResultsUsingProperty:@"name" ascending:YES];
链式查询
在查询结果的基础上, 进行二次查询
[persons objectsWhere:@"address beginswith '北京'"];
分页
RLMResults<Person *> *persons = [Person allObjects];
for (NSInteger i = 0; i < 5; i++) {
Person *person = persons[i];
}
网友评论