GreenDao 3.X之RxJava

        在GreenDao 3.X之基本使用已经了解到GreenDao 3.X的基本使用。现GreenDao 3.X已集成RxJava,其中,RxDao 和RxQuery便是GreenDao 3.X中RxJava的核心操作类。其最大的特点就是在增删改查等基本操作时返回Observable,用于RxJava的流式逻辑写法,其最大的优点便于流式开发,提高代码的可读性。。既然集成了RxJava,当然要尝尝鲜,看看该如何使用。

RxDao

获取RxDao对象和RxQuery对象

    RxDao mRxDao = xxDao.rx(); // 返回一个默认subscribeOn在IO线程的RxDao
                                     // T是实体类,K主键类型
    RxDao mRxDao = xxDao.rxPlain();// 返回一个未设置默认订阅的RxDao

常用 API

    rx.Observable     count():返回一个含有数据库数据个数的Observable

    rx.Observable     delete(T entity):从数据库中删除数据,并返回一个空的Observable
    rx.Observable     deleteAll():从数据库中删除数据,并返回一个空的Observable
    rx.Observable     deleteByKey(K key):将数据库中主键为key的数据删除,,并返回一个空的Observable
    rx.Observable     deleteByKeyInTx(java.lang.Iterable keys):使用事务操作,将数据库中,删除key集合中每个key所对应的实体,并返回一个空的Observable
    rx.Observable     deleteByKeyInTx(K... keys):使用事务操作,将数据库中,删除key[ ]中每个key所对应的实体,并返回一个空的Observable
    rx.Observable     deleteInTx(java.lang.Iterable entities):使用事务操作,将数据库中,删除实体集合中每个实体所对应的实体,并返回一个空的Observable
    rx.Observable     deleteInTx(T... entities):使用事务操作,将数据库中,删除实体集合中每个实体[ ]所对应的实体,并返回一个空的Observable

    rx.Scheduler     getScheduler():返回当前调度器

    rx.Observable                         insert(T entity):将实体插入数据库,并返回包含此实体的Observable
    rx.Observable>     insertInTx(java.lang.Iterable entities):使用事务操作将实体插集合入数据库,并返回包含此实体集合的Observable
    rx.Observable        insertInTx(T... entities):使用事务操作将实体[ ]插入数据库,并返回包含此实体数组的Observable
    rx.Observable                         insertOrReplace(T entity):将实体插入数据库,若此实体的Key已存在,将原来的数据覆盖,并返回包含此实体的Observable
    rx.Observable>     insertOrReplaceInTx(java.lang.Iterable entities):将实体集合插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
                                                                                                  并返回包含此实体集合的Observable
    rx.Observable        insertOrReplaceInTx(T... entities):将实体[ ]插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
                                                                                 并返回包含此实体[ ]的Observable
                                                                                                                    
    rx.Observable                             load(K key):将主键为Key的实体加载至内存,并返回包含此实体的Observable
    rx.Observable>     loadAll():将所有实体加载至内存,并返回包含此实体集合的Observable

    rx.Observable     refresh(T entity):更新实体,并返回包含此实体的Observable

    rx.Observable                         save(T entity)::将实体插入数据库,若此实体的Key已存在,将原来的数据覆盖,并返回包含此实体的Observable
    rx.Observable>     saveInTx(java.lang.Iterable entities):将实体集合插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
                                                                                       并返回包含此实体集合的Observable
    rx.Observable        saveInTx(T... entities):将实体[ ]插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
                                                                                                                    并返回包含此实体[ ]的Observable
                                                                                                                    
    rx.Observable                         update(T entity):将实体更新,并返回包含此实体的Observable
    rx.Observable>     updateInTx(java.lang.Iterable entities):使用事务操作将实体集合更新,并返回包含此实体集合的Observable
    rx.Observable        updateInTx(T... entities):使用事务操作将实体[ ]更新,并返回包含此实体数组的Observable

RxQuery

获取RxQuery对象

    RxQuery mRxQuery = xxQueryBuilder.rx();
    RxQuery mRxQuery = xxQueryBuilder.rxPlain();

常用API

        rx.Observable                     unique():唯一查询,返回含有该实体的Observable
        rx.Observable>     list():获取实体集合,,返回含有该实体集合的Observable

基本使用

       GreenDao 3.X集成RxJava后,对于数据库的创建与GreenDao的基本使用是一致的,主要不同在于对数据库操作时,使用了RxDao和RxQuery操作类,具体使用形式如下:

public class StudentDaoOpeRx {

    /**
     * @desc 添加数据至数据库
     * @autor Tiany
     * @time 2016/8/13
     **/
    public static Observable insertData(Context context, Student stu) {

        return DbManager.getDaoSession(context).getStudentDao().rx().insert(stu);
    }

    /**
     * @desc 将数据实体通过事务添加至数据库
     * @autor Tiany
     * @time 2016/8/13
     **/
    public static Observable> insertData(Context context, List list) {
        if (null == list || list.size() <= 0) {
            return Observable.error(new Throwable("null"));
        }
        return DbManager.getDaoSession(context).getStudentDao().rx().insertInTx(list);
    }

    /**
     * @desc 添加数据至数据库,如果存在,将原来的数据覆盖
     * @autor Tiany
     * @time 2016/8/15
     **/
    public static Observable saveData(Context context, Student student) {
        return DbManager.getDaoSession(context).getStudentDao().rx().save(student);
    }


    /**
     * @desc 查询所有数据
     * @autor Tiany
     * @time 2016/8/15
     **/
    public static Observable> queryAll(Context context) {
        RxQuery rxQuery = DbManager.getDaoSession(context).getStudentDao().queryBuilder().rx();

        return rxQuery.list();
    }

    /**
     * @desc 删除数据
     * @autor Tiany
     * @time 2016/8/15
     **/
    public static Observable deleteData(Context context, Student student) {
        return DbManager.getDaoSession(context).getStudentDao().rx().delete(student);
    }

    /**
     * @desc 删除全部数据
     * @autor Tiany
     * @time 2016/8/15
     **/
    public static Observable deleteAll(Context context) {
        return DbManager.getDaoSession(context).getStudentDao().rx().deleteAll();
    }

    /**
     * @desc 更新数据
     * @autor Tiany
     * @time 2016/8/15
     **/
    public static Observable updateData(Context context, Student student) {
        return DbManager.getDaoSession(context).getStudentDao().rx().update(student);
    }
}
       既然数据库的操作类已完成,对于数据库的操作,大家都轻松的解决了。不熟悉RxJava,可以看下RxJava操作符的基本使用,RxJava操作符相关介绍,相信你看完以后,对于RxJava的基本使用也就掌握了。

参考资料

        1.GeenDao 3.1 API

        2.GreenDao Examples


你可能感兴趣的:(Android框架)