简介
Realm是由 Y Combinator 公司孵化的一款支持运行在移动设备上的旨在取代 CoreData 和 Sqlite 的嵌入式数据库。它拥有自己的数据库存储引擎,可以高效且快速地完成数据库的构建操作。
Realm可以轻松地移植到项目当中,并且绝大部分常用的增删查改功能,都可以用一行简单的代码轻松完成!目前支持Objective-C、Swift和Java三种语言,也就是说可以在iOS、Android和Mac上面跨平台使用。
下载地址:https://github.com/realm/realm-cocoa
一、快速集成 Realm
- 如果使用cocoapods,命令语句如下:
platform :ios, '8.0'
target 'Simona_Realm' do
pod 'Realm', '~> 3.0.0-beta.3'
- 如果使用手动集成,步骤如下:
- 下载最新的
Realm
更新包,解压zip文件 - 将
ios/static
目录下面的Realm.framework
文件拖到项目里面(确保Copy items if needed选中) - 在
target -> Build Phases -> Link Binary with Libraries
中添加libc++.dylib
二、创建 Realm 对象模型
- 继承于
RLMObject
,存储在数据库的模型都需要继承于RLMObject
#import
@interface Friends : RLMObject
@property int groupId;
@property int frendsId;
@property NSString *face;
@property NSString *name;
@property NSString *desc;
@end
RLM_ARRAY_TYPE(Friends)
注意:
- 对象的属性声明,注意请不要带上
nonatomic
,assign
,strong
等这样修饰的词(官方推荐避免引起错误) - 定义了
RLM_ARRAY_TYPE(Friends)
表示支持RLMArray
属性,相当于允许RLMArray< Friends >
属性的使用 -
RLMObject
支持BOOL
,NSInteger
,long
,double
,CGFloat
,NSString
,NSDate
,NSData
等类型的属性
三、存储 Realm 对象
- Realm 对象有多种存储方式,以下介绍最常用的两种存储方法:
- 第一种方法
// 初始化realm的数据库对象
RLMRealm *realm = [RLMRealm defaultRealm];
// 快速Realm创建对象
Friends *friend = [[Friends alloc] init];
friend.name = @"张三";
friend.face = @"https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2107565960,1651633757&fm=26&gp=0.jpg";
friend.desc = @"这是一个好友签名";
friend.frendsId = 1;
friend.groupId = 2;
// 存储对象
[realm transactionWithBlock:^{
[realm addObject:friend];
}];
- 第二种方法
// 初始化realm的数据库对象
RLMRealm *realm = [RLMRealm defaultRealm];
// 开启事务
[realm beginWriteTransaction];
// 存储对象
[realm addObject:friend];
// 提交事务
[realm commitWriteTransaction];
四、删除数据
- Realm 有多种存储方式,以下分别介绍 删除单条数据,清除一张表数据,清除所有数据 的方法:
- 删除单条数据
RLMRealm *realm = [RLMRealm defaultRealm];
// 获取需要删除的对象
RLMResults *results = [Friends objectsWhere:@"frendsId = %d",1];
Friends *friend = results.firstObject;
// 删除单条数据
[realm transactionWithBlock:^{
[realm deleteObject:friend];
}];
- 清除一张表数据
RLMRealm *realm = [RLMRealm defaultRealm];
RLMResults *results = [Friends allObjects];
for (Friends *friend in results) {
[realm transactionWithBlock:^{
[realm deleteObject:friend];
}];
}
- 清除所有数据
RLMRealm *realm = [RLMRealm defaultRealm];
[realm deleteAllObjects];
五、查询数据
- 查询全部数据
RLMResults *results = [Friends allObjects];
- 按条件查询
- 条件查询
RLMResults *results = [Friends objectsWhere:@"frendsId > 2"];
- 按顺序查询
// ascending:是否按升序排列
RLMResults *results = [Friends sortedResultsUsingKeyPath:@"frendsId" ascending:YES];
- 链式查询
// 查询所有叫 张三 的人,并且按 frendsId 升序排列
RLMResults *results = [[Friends objectsWhere:@"name = %d",@"张三"] sortedResultsUsingKeyPath:@"frendsId" ascending:YES];
六、更新数据
RLMRealm *realm = [RLMRealm defaultRealm];
// 获取需要更新数据的对象
RLMResults *friends = [Friends objectsWhere:@"frendsId = %d",1];
Frends *friend = friends.firstObject;
// 更新数据,更新好友分组
[realm transactionWithBlock:^{
friend.groupId = 2;
}];