realm安装:
1.全局安装 rnpm npm install -g rnpm
2.cd 到工程目录 npm install --save realm
3.将realm库依赖到RN项目中:rnpm link realm
入门理解:(提取一些比较重要的概念,realm官方文档没有详细说明的点)
1.创建目录:默认在缓存document目录下
let db = new Realm({
path:'PUK.realm',
scheme:[IMSchema]
})
可以通过 console.log(JSON.stringify(db.path)) 输出数据库的绝对路径,
2.realm增删改查基本操作的写法:
a.修改:增,删,改 需要放在realm的写事务中完成。
realm.write(()=>{
let car1= realm.create('Car',{id:1,name:'mini'}); // 【增】'Car'是表名,car 是表的一条数据
let car2= realm.create('Car',name:'dazong'},true);//[改]
//改需要满足两个条件:1.第三个参数true 2.id是主键 如果id不是主键,这句写法就是增
realm.delete(car2);//[删]
})
b.查:
let cars = realm.objects('Car'); //取此表所有数据
let caRSSpecial = cars.filtered('name = "mini" OR name BEGINSWITH "m"'); //条件查询
let carsRange = cars.slice(0,5);//范围筛选
let caRSSorted = caRSSpercial.sorted('mini');//因为单纯范围筛选没什么意义,所以加上排序方法。
//通常使用方式:查询->排序->筛选
//注意:这里的排序只作用于内存,并不会反映在数据库中
3.realm几个很有用的特性:
1.migration方法
因为定义的scheme在对应的数据库中生成表之后,修改格式是违法的。所以需要用到migration.
它可以把旧数据字段整合到新的数据字段中。
同时migration最大优势是可以对数据库实现版本控制:
写法:(copy官方)
var schemas = [ { schema: schema1, schemaVersion: 1migration: migrationFunction1 }, : schema22: migrationFunction2 ... ] // the first schema to update to is the current schema version // since the first schema in our array is at var nextSchemaIndex = Realm.schemaVersion(Realm.defaultPath); while (nextSchemaIndex < schemas.length) { var migratedRealm new Realm(schemas[nextSchemaIndex++]); migratedRealm.close(); } // open the Realm with the latest schema var realm [schemas-]);
2.auto-updated 机制:(copy 官方)
let hondas = realm.objects('Car').filtered'make = "Honda"'); // hondas.length == 0 realm.write(() => { realm.create{make: 'Honda'model'RSX'}); }); // hondas.length == 1
hondas一次取完,可以一直与数据库保持同步,不用再次取。
3.notification机制:(copy 官方)
// Observe Collection Notifications realm'Dog''age < 2').addListener((puppieschanges{ // Update UI in response to inserted objects changes.insertions.forEach((index{ //增 事件回调 let insertedDog = puppies[index]; ... }); // Update UI in response to modified objects changes.modifications{ //改 事件回调 let modifiedDog // Update UI in response to deleted objects changes.deletions{//查 事件回调 // Deleted objects cannot be accessed directly // Support for accessing deleted objects coming soon... }); }); // Unregister all listeners realm.removeAllListeners();
因为realm auto-updated机制,所以很好的能够支持数据监听并抛出数据变动事件。
如果感兴趣继续探讨,欢迎加QQ群:429307812