在GreenDao 3.X之基本使用已经了解到GreenDao 3.X的基本使用。现GreenDao 3.X已集成RxJava,其中,RxDao<T,K> 和RxQuery<T>便是GreenDao 3.X中RxJava的核心操作类。其最大的特点就是在增删改查等基本操作时返回Observable,用于RxJava的流式逻辑写法,其最大的优点便于流式开发,提高代码的可读性。。既然集成了RxJava,当然要尝尝鲜,看看该如何使用。
RxDao
获取RxDao对象和RxQuery对象
RxDao<T,K> mRxDao = xxDao.rx(); // 返回一个默认subscribeOn在IO线程的RxDao
// T是实体类,K主键类型
RxDao<T,K> mRxDao = xxDao.rxPlain();// 返回一个未设置默认订阅的RxDao
常用 API
rx.Observable<java.lang.Long> count():返回一个含有数据库数据个数的Observable
rx.Observable<java.lang.Void> delete(T entity):从数据库中删除数据,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteAll():从数据库中删除数据,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteByKey(K key):将数据库中主键为key的数据删除,,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteByKeyInTx(java.lang.Iterable<K> keys):使用事务操作,将数据库中,删除key集合中每个key所对应的实体,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteByKeyInTx(K... keys):使用事务操作,将数据库中,删除key[ ]中每个key所对应的实体,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteInTx(java.lang.Iterable<T> entities):使用事务操作,将数据库中,删除实体集合中每个实体所对应的实体,并返回一个空的Observable
rx.Observable<java.lang.Void> deleteInTx(T... entities):使用事务操作,将数据库中,删除实体集合中每个实体[ ]所对应的实体,并返回一个空的Observable
rx.Scheduler getScheduler():返回当前调度器
rx.Observable<T> insert(T entity):将实体插入数据库,并返回包含此实体的Observable
rx.Observable<java.lang.Iterable<T>> insertInTx(java.lang.Iterable<T> entities):使用事务操作将实体插集合入数据库,并返回包含此实体集合的Observable
rx.Observable<java.lang.Object[]> insertInTx(T... entities):使用事务操作将实体[ ]插入数据库,并返回包含此实体数组的Observable
rx.Observable<T> insertOrReplace(T entity):将实体插入数据库,若此实体的Key已存在,将原来的数据覆盖,并返回包含此实体的Observable
rx.Observable<java.lang.Iterable<T>> insertOrReplaceInTx(java.lang.Iterable<T> entities):将实体集合插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
并返回包含此实体集合的Observable
rx.Observable<java.lang.Object[]> insertOrReplaceInTx(T... entities):将实体[ ]插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
并返回包含此实体[ ]的Observable
rx.Observable<T> load(K key):将主键为Key的实体加载至内存,并返回包含此实体的Observable
rx.Observable<java.util.List<T>> loadAll():将所有实体加载至内存,并返回包含此实体集合的Observable
rx.Observable<T> refresh(T entity):更新实体,并返回包含此实体的Observable
rx.Observable<T> save(T entity)::将实体插入数据库,若此实体的Key已存在,将原来的数据覆盖,并返回包含此实体的Observable
rx.Observable<java.lang.Iterable<T>> saveInTx(java.lang.Iterable<T> entities):将实体集合插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
并返回包含此实体集合的Observable
rx.Observable<java.lang.Object[]> saveInTx(T... entities):将实体[ ]插入数据库,若某个实体的Key已存在,将原来的数据覆盖,
并返回包含此实体[ ]的Observable
rx.Observable<T> update(T entity):将实体更新,并返回包含此实体的Observable
rx.Observable<java.lang.Iterable<T>> updateInTx(java.lang.Iterable<T> entities):使用事务操作将实体集合更新,并返回包含此实体集合的Observable
rx.Observable<java.lang.Object[]> updateInTx(T... entities):使用事务操作将实体[ ]更新,并返回包含此实体数组的Observable</span>
RxQuery
获取RxQuery对象
RxQuery<T> mRxQuery = xxQueryBuilder.rx();
RxQuery<T> mRxQuery = xxQueryBuilder.rxPlain();
常用API
rx.Observable<T> unique():唯一查询,返回含有该实体的Observable
rx.Observable<java.util.List<T>> list():获取实体集合,,返回含有该实体集合的Observable
基本使用
GreenDao 3.X集成RxJava后,对于数据库的创建与GreenDao的基本使用是一致的,主要不同在于对数据库操作时,使用了RxDao和RxQuery操作类,具体使用形式如下:
public class StudentDaoOpeRx {
/**
* @desc 添加数据至数据库
* @autor Tiany
* @time 2016/8/13
**/
public static Observable<Student> insertData(Context context, Student stu) {
return DbManager.getDaoSession(context).getStudentDao().rx().insert(stu);
}
/**
* @desc 将数据实体通过事务添加至数据库
* @autor Tiany
* @time 2016/8/13
**/
public static Observable<Iterable<Student>> insertData(Context context, List<Student> 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<Student> saveData(Context context, Student student) {
return DbManager.getDaoSession(context).getStudentDao().rx().save(student);
}
/**
* @desc 查询所有数据
* @autor Tiany
* @time 2016/8/15
**/
public static Observable<List<Student>> queryAll(Context context) {
RxQuery<Student> rxQuery = DbManager.getDaoSession(context).getStudentDao().queryBuilder().rx();
return rxQuery.list();
}
/**
* @desc 删除数据
* @autor Tiany
* @time 2016/8/15
**/
public static Observable<Void> deleteData(Context context, Student student) {
return DbManager.getDaoSession(context).getStudentDao().rx().delete(student);
}
/**
* @desc 删除全部数据
* @autor Tiany
* @time 2016/8/15
**/
public static Observable<Void> deleteAll(Context context) {
return DbManager.getDaoSession(context).getStudentDao().rx().deleteAll();
}
/**
* @desc 更新数据
* @autor Tiany
* @time 2016/8/15
**/
public static Observable<Student> updateData(Context context, Student student) {
return DbManager.getDaoSession(context).getStudentDao().rx().update(student);
}
}
既然数据库的操作类已完成,对于数据库的操作,大家都轻松的解决了。不熟悉RxJava,可以看下RxJava操作符的基本使用,RxJava操作符相关介绍,相信你看完以后,对于RxJava的基本使用也就掌握了。
参考资料
本文介绍了GreenDao 3.X如何与RxJava结合使用,重点讲解了RxDao和RxQuery对象的获取及常用API,强调了它们在实现流式逻辑写法中的优势,有助于提升代码可读性。

4203

被折叠的 条评论
为什么被折叠?



