在swift项目的开发中,realm是炙手可热的移动端数据库,我们一起来简单了解下realm。
目前realm支持Java、Swift、Objective-C、Java-Script、.Net共计5中语言,公司项目目前是OC开发,本次我们选择Objective-C版来学习下realm的用法。
准备工作
1.创建一个oc的项目通过cocoapods管理方式引入realm ( pod 'Realm', '~> 10.5.0').
2.打开项目,演示realm简单的增、删、改、查用法。
步骤流程
1.创建一个Realm
的模型
* .h文件
#import <Realm/Realm.h>
NS_ASSUME_NONNULL_BEGIN
@interface StudentModel : RLMObject
@property NSString *studentID;
@property NSString *name;
@property int age;
@end
NS_ASSUME_NONNULL_END
*.m 文件
@implementation StudentModel
+ (NSString *)primaryKey {
return @"studentID";
}
@end
注意:对象必须继承 RLMObject
-
我们参照realm官网中realm-objective-c 即刻开始的步骤来学习下数据库的增、删、改、查 简单用法
一、增
文档示意:
01.png
演示代码:
//当然在打开Realm 数据库之前,可以对其进行配置,如下代码所示,这里暂时用defaultRealm /** RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration]; //使用默认的目录,但是使用用户名来替换默认的文件名 config.fileURL = [[[config.fileURL URLByDeletingLastPathComponent]URLByAppendingPathComponent:@"Allison"]URLByAppendingPathExtension:@"realm"]; //将这个配置应用到默认的realm数据库中 [RLMRealmConfiguration setDefaultConfiguration:config]; */ RLMRealm *realm = [RLMRealm defaultRealm]; StudentModel *model = [[StudentModel alloc]initWithValue:@{@"studentID":@"001",@"na>me":@"张三",@"age":@18}]; //1.添加模型 [realm transactionWithBlock:^{ [realm addObject:model]; }]; NSLog(@"数据库路径:%@",[[RLMRealmConfiguration defaultConfiguration]fileURL]);
效果如下:
02.png
注意:后面需要演示到查询和删除,所以这里多添加几条李四,王五,赵六,孙七、周八、吴九、郑十的信息
如下图所示:
03.png
二、查
( 把查询提到删除前面来,因为想删除一条数据,必须先要查询出来,才可以删除或者更改 )
文档示意:
04.png
演示代码
//2.查询数据 //2.1 所有的查询(包含查询和属性访问)在realm中都是延时加载,只有当属性被访问时,才能够读取响应的数据 RLMResults *results = [StudentModel allObjects]; NSLog(@"===查询结果:%@",results); //2.2带条件查询 RLMResults *results2 = [StudentModel objectsWhere:@"name = '张三'"]; NSLog(@"带条件查询结果:%@",results2); //2.3排序/降序查询 RLMResults *result3 = [StudentModel allObjects]; RLMResults *sortResult = [result3 >sortedResultsUsingKeyPath:@"age" ascending:YES]; NSLog(@"排序/降序查询:%@",sortResult); //2.4嵌套条件查询 如:年龄20岁的张三 RLMResults *nameResult = [StudentModel objectsWhere:@"name = '张三'"]; RLMResults *ageResult = [nameResult objectsWhere:@"age = 20"]; NSLog(@"嵌套查询:%@",ageResult);
效果如图所示:
05.png
三、删
文档示意:
06.png演示代码:
//3.删除数据 RLMResults *results = [StudentModel objectsWhere:@"name = '张三'"]; StudentModel *model = results.firstObject; //删除的模型,一定要是被realm所管理的,不能是新建的模型 [realm transactionWithBlock:^{ [realm deleteObject:model]; }];
如图所示:
07.png3.2 删除某个模型下的所有数据
(此步骤不可以,可以放在最后来试)//删除某一个模型下的所有数据,如删除>StudentModel表里面的所有数据 RLMResults *results2 = [StudentModel allObjects]; for (StudentModel *model in results2) { [realm transactionWithBlock:^{ [realm deleteObject:model]; }]; }
如图所示:
011.png
四、改
文档示意:
08.jpg演示代码
4.1更改模型属性
//4.1更改模型属性 //修改的模型,一定是被realm所管理的模型,不能是alloc init 新建的模型 RLMResults * _Nonnull result = [StudentModel objectsWhere:@"name = '李四'"]; StudentModel *model = result.firstObject; [realm transactionWithBlock:^{ model.name = @"李四名字更改了"; }];
如图所示:
09.png4.2 通过主键更改模型属性
//如果模型没有主键,更新的时候会报错 // reason: ''StudentModel' does not have a primary key and can not be updated' StudentModel *model = [[StudentModel alloc]initWithValue:@{@"studentID":@"003",@"name":@"王五名字年龄都更改了",@"age":@108}]; [realm transactionWithBlock:^{ [realm addOrUpdateObject:model]; }];
如图所示:
010.png
以上是realm数据库简单的增、删、改、查操作。参考文档,通过一个小例子来了解学习。
上面只是简单的示例,实际开发中也会遇到一些问题和注意事项,以下总结一下本人遇到的问题及注意事项,共同学习。
- 注意事项-realm支持的数据类型仅包含以下几种
Realm 支持下述属性类型:BOOL
、bool
、int
、NSInteger
、long
、long long
、float
、double
、NSString
、NSDate
、NSData
以及 被特殊类型标记的NSNumber
。
- 问题记录
被忽略属性,即不想存在数据库中的字段,可以重写+ignoredProperties
方法,或者在属性前增加 (readonly)字段;// 方法① + (NSArray *)ignoredProperties { return @[@"tmpID"]; } // 方法② @property (readonly) NSString * tmpID; // 只读属性会被自动忽略
Realm其它用法:
iOS - objective-c中realm的对应关系
iOS - objective-c中realm的迁移
网友评论