realm官网: https://realm.io/cn/docs/objc/latest/
1.将Realm库pod到工程中
pod 'Realm'
2.建立数据模型
#import <Realm/Realm.h>
@interface Student : RLMObject
@property NSString *name;
@property NSInteger age;
/**
获取数据模型
*/
+(Student *)StudentWithName:(NSString *)name;
/**
删除数据
*/
+(void)deleteStudentWithName:(NSString *)name;
/**
更新数据
*/
- (void)updateAge:(NSInteger)age;
@end
#import "Student.h"
@implementation Student
/**
设置主键
*/
+(NSString *)primaryKey{
//主键
return @"name";
}
/**
获取数据模型
*/
+(Student *)StudentWithName:(NSString *)name
{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
if (student == nil) {
student = [[Student alloc] init];
student.name = name;
[realm beginWriteTransaction];
[realm addObject:student];
[realm commitWriteTransaction];
}
return student;
}
/**
更新数据
*/
- (void)updateAge:(NSInteger)age{
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
self.age = age;
[realm commitWriteTransaction];
}
/**
删除数据
*/
+ (void)deleteStudentWithName:(NSString *)name{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
[realm beginWriteTransaction];
[realm deleteObject:student];
[realm commitWriteTransaction];
}
@end
3.增、删、改、查 操作
/**
获取数据模型【增】
*/
+(Student *)StudentWithName:(NSString *)name
{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
if (student == nil) {
student = [[Student alloc] init];
student.name = name;
//增加模型
[realm beginWriteTransaction];
[realm addObject:student];
[realm commitWriteTransaction];
}
return student;
}
/**
删除数据【删】
*/
+ (void)deleteStudentWithName:(NSString *)name{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
[realm beginWriteTransaction];
//删除模型
[realm deleteObject:student];
[realm commitWriteTransaction];
}
/**
更新数据【改】
*/
- (void)updateAge:(NSInteger)age{
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
//更改数据
self.age = age;
[realm commitWriteTransaction];
}
/**
查询数据【查】
*/
_allStudent = [Student allObjects];
4.数据库升级
所谓数据库升级,比如,rev1.0版本发布了,其数据中原始数据模型为只有 name 和 age 两个属性。rev2.0需要给模型添加 score 和 class 两个属性,这时候,如果直接给模型添加属性,不做数据库升级操作,则需要将APP卸载,重新安装才能使用,不然就是直接crash。
添加一个数据模型也是一样的,比如直接新建一个 Math 模型,其有teacher 和 class属性。直接新建添加,不做数据库升级,也是直接crash。
当涉及到更改数据库模型时就需要对数据库进行升级操作了,realm数据库升级操作很简单。在AppDelegate中调用即可。
- (void)migrationRealm{
// 在 [AppDelegate didFinishLaunchingWithOptions:] 中进行配置
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
// 设置新的架构版本。这个版本号必须高于之前所用的版本号(如果您之前从未设置过架构版本,那么这个版本号设置为 0)
config.schemaVersion = 2;
// 设置闭包,这个闭包将会在打开低于上面所设置版本号的 Realm 数据库的时候被自动调用
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
// 什么都不要做!Realm 会自行检测新增和需要移除的属性,然后自动更新硬盘上的数据库架构
if (oldSchemaVersion < 1) {
}
};
// 告诉 Realm 为默认的 Realm 数据库使用这个新的配置对象
[RLMRealmConfiguration setDefaultConfiguration:config];
// 现在我们已经告诉了 Realm 如何处理架构的变化,打开文件之后将会自动执行迁移
[RLMRealm defaultRealm];
}
然后调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//数据库升级
[self migrationRealm];
return YES;
}