关于Realm
在学习 Android 的时候 , 我们知道数据持久化的问题,对于数据持久化通常有以下几种方式:
- SQLlite
- Sharedpreferences
- 文件 I/O
现在,有一种使用方便,速度更快的存储数据方式出现了,他就是 Realm。他的官网
Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。
为什么要使用Realm?
简单易用
Realm 并不是一个建立在 SQLite 之上的 ORM,而是一个基于自己的持久化引擎,简单并且快速的面向对象移动数据库。我们的用户们说分分钟就学会了怎样使用Realm,迁移 App 到 Realm 也不过只需要花几个小时,方便的 Realm 为他们省却了数周的开发工作。
跨平台
Realm 支持 iOS、OS X(Objective‑C和Swift)以及 Android 。Realm 文件可以跨平台共享,让 Java、Swift 和 Objective‑C 使用相同的抽象模型访问,从而让您在各个平台上使用尽可能相似的业务逻辑。
快速
得益于 zero-copy 的设计,Realm 比普通的 ORM 要快很多,甚至比单独无封装的 SQLite 还要快。请参考 iOS benchmark 和 Android benchmark ,或者看看我们的用户们在 Twitter 上怎么说。
支持
您可以通过以下渠道获得迅速的官方支持:Github、StackOverflow、Twitter、微博。
使用 Realm
来看一看怎么用吧,目前 Realm 更新到了 0.88.3,要在安卓工程中使用 Realm,你需要在 module 的 build.gradle 文件中添加一个依赖:
compile 'io.realm:realm-android:0.88.3'
一个 Realm 相当于一个 SQLite 数据库。它有一个与之对应的文件,一旦创建将持久保存在安卓的文件系统中。
要创建一个新的 Realm,你可以在任意 Activity 中调用静态方法 Realm.getInstance 。
Realm realm = Realm.getInstance(context);
注意,调用 Realm.getInstance,而没有传入RealmConfiguration,会创建一个叫做 default.realm 的 Realm 文件。
如果你想向app中添加另一个 Realm,必须使用一个 RealmConfiguration.Builder 对象,并为 Realm 文件指定一个独有的名字。
Realm realm = Realm.getInstance(
new RealmConfiguration.Builder(context)
.name("data.realm")
.build()
);
如果需要存储某个对象到 Realm里面 , 只要继承了RealmObject类。比如,下面这个类的实例就能轻松的存储在一个Realm中:
public class User extends RealmObject {
private String name;
private int age;
private int sessionId;
// Standard getters & setters generated by your IDE…
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public int getSessionId() { return sessionId; }
public void setSessionId(int sessionId) { this.sessionId = sessionId; }
}
这是存储数据的方法
realm.beginTransaction();
User user = realm.createObject(User.class);
user .setName("XXX");
user .setAge(11);
user .getSessionId(1123);
realm.commitTransaction();
再来看看查询的方法
RealmResults user =
realm.where(User.class).findAll();
findAll 可以遍历出所有存储的对象并返回,如果需要添加查询,可以加上其他方法。
RealmResults user =
realm.where(User.class)
.greaterThan("age", 10)
.findAll();
上面的代码演示了如何使用greaterThan方法来获取age 大于 10 的数据。