realm简单使用

2017-01-24  本文已影响112人  浅笑夏沫

数据库——android四大存储之一,说实话已经很久没有使用了,平时是要使用网络与文件存储,除非是需要离线模式,或者有特殊的要求。realm——一款轻量级的移动端数据库,相比SQLite和其他orm框架有着其许多的优点,以前只是听过,今天来一睹庐山真面目。
相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api(Rx),数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。

如何使用

  1. 依赖
    首先是在project的build.gradle中添加
dependencies {
       ...
        classpath "io.realm:realm-gradle-plugin:2.2.2"
}

然后是app的build.gradle中在apply plugin: 'com.android.application'下面添加

apply plugin: 'realm-android'

现在我们sync project 就可以了。

  1. 创建realm
    我们需要在自定义一个类继承Application
public class AppContext extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        RealmConfiguration config = new RealmConfiguration.Builder()
//                .name("myRealm.realm")
                .build();
        Realm.setDefaultConfiguration(config);
    }
}
  1. 创建RealmObject
    只要继承了RealmObject类,任意JavaBean都能存储在Realm中。
public class RealmBean extends RealmObject {
    private String openId;
    private boolean isRead;

    public String getOpenId() {
        return openId;
    }

    public void setOpenId(String openId) {
        this.openId = openId;
    }

    public boolean isRead() {
        return isRead;
    }

    public void setRead(boolean read) {
        isRead = read;
    }
}
  1. 工具类
    4.1. 插入
public static void insertRealm(String openId) {
   Realm realm = Realm.getDefaultInstance();
   realm.beginTransaction();
   RealmBean bean = realm.createObject(RealmBean.class);
   bean.setOpenId(openId);
   bean.setRead(false);
   realm.commitTransaction();
}

你可能注意到了bean并不是用Country类的构造器创建的。对于一个Realm来说,管理一个RealmObject的实例,这个实例必须用createObject方法创建。
如果你必须使用构造器,别忘了在提交事务前使用相关Realm对象的copyToRealm方法。

public static void insertRealm(String openId) {
    Realm realm = Realm.getDefaultInstance();
    realm.beginTransaction();
    RealmBean bean = new RealmBean();
    bean.setOpenId(openId);
    bean.setRead(false);
    realm.copyToRealm(bean);
    realm.commitTransaction();
}

4.2. 删除

public static RealmBean deleteRealm(String openId) {
    Realm mRealm = Realm.getDefaultInstance();
    RealmBean bean = mRealm.where(RealmBean.class).equalTo("openId", openId).findFirst();
    mRealm.beginTransaction();
    bean.deleteFromRealm();
    mRealm.commitTransaction();
    return bean;
}

4.3. 修改

public static void updateRealm(String openId) {
    Realm mRealm = Realm.getDefaultInstance();
    RealmBean bean = mRealm.where(RealmBean.class).equalTo("openId", openId).findFirst();
    mRealm.beginTransaction();
    bean.setRead(true);
    mRealm.commitTransaction();
}

4.4. 查询

public static RealmBean queryRealm(String openId) {
    Realm mRealm = Realm.getDefaultInstance();
    RealmBean bean = mRealm.where(RealmBean.class).equalTo("openId", openId).findFirst();
    return bean;
}
public static List<RealmBean> queryRealmList(boolean isRead) {
    Realm mRealm = Realm.getDefaultInstance();
    RealmResults<RealmBean> bean = mRealm.where(RealmBean.class).equalTo("isRead", isRead).findAll();
    return bean;
}

以上就是realm的基本用法,虽然realm简单快捷方便,但还是有许多的短板。

缺点

总结

realm的优点自然不用多说,一个字:快。在保证了ACID的要求下,很多设计都是以速度为主。当然,Realm 最核心的理念就是对象驱动,这是 Realm 的核心原则。Realm 本质上是一个嵌入式数据库,但是它也是看待数据的另一种方式。它用另一种角度来重新看待移动应用中的模型和业务逻辑。
Realm还是跨平台的,多个平台都使用相同的数据库,是多么好的一件事情呀。相信使用Realm作为App数据库的开发者会越来越多。

上一篇 下一篇

猜你喜欢

热点阅读