美文网首页
realm简单使用

realm简单使用

作者: 浅笑夏沫 | 来源:发表于2017-01-24 09:17 被阅读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);
        }
    }
    
    • 注释部分为realm的名称,我们使用默认的default.realm。
    • 不要忘记在manifest中使用我们自定义的Application。
    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 支持以下查询条件
      • between()、greaterThan()、lessThan()、greaterThanOrEqualTo() 和 lessThanOrEqualTo()。
      • equalTo() 和 notEqualTo()。
      • contains()、beginsWith() 和 endsWith()。
      • isNull() 和 isNotNull()。
      • isEmpty() 和 isNotEmpty()。

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

    缺点

    • 不是基于sqlite的,他有自己的存储引擎 ,存储不是基于表的,所以联表查询不支持。
    • 所有的数据模型必须直接继承自RealmObject。这阻碍我们利用数据模型中的任意类型的继承。
    • Realm 没有自动增长属性。
    • Realm对象的 Setters & Getters 不能被重载
    • 尽管 Realm 文件可以被多个线程同时访问,但是您不能跨线程处理 Realms、Realm 对象、查询和查询结果。

    总结

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

    相关文章

      网友评论

          本文标题:realm简单使用

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