美文网首页
持久化方案-Realm(一):基本使用

持久化方案-Realm(一):基本使用

作者: aaayia | 来源:发表于2018-09-20 15:17 被阅读6次

    什么是Realm

    Realm是一个跨平台移动数据库引擎,支持iOS、OS X(Objective-C和Swift)以及Android,核心数据引擎C++打造,并不是建立在SQLite之上的ORM, 是拥有独立的数据库存储引擎。

    (一)简单的数据操作

    创建数据模型,

    创建的数据模型必须继承自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];//提交写入事务
    
    
    • 方式二:根据主键进行更新
    1. 要求操作的模型, 必须实现方法+ (NSString *)primaryKey 返回主键
    2. 在事务中调用方法 [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];
    

    查询数据

    1. 所有的查询(包括查询和属性访问)在 Realm 中都是延迟加载的,只有当属性被访问时,才能够读取相应的数据
    2. 查询结果并不是数据的拷贝:修改查询结果(在写入事务中)会直接修改硬盘上的数据。
    3. 一旦检索执行之后, 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];
      }
    

    相关文章

      网友评论

          本文标题:持久化方案-Realm(一):基本使用

          本文链接:https://www.haomeiwen.com/subject/bhknnftx.html