Room Persistent Library + RxJava


Roomとは?

Googleが今年の春頃に発表したAndroid Architecture Componentsに含まれている、ORM(永続化、オブジェクトマッピング)ライブラリです。

Roomの良さげなところ

  • 構成がDDDっぽい
    • Entity/Dao/Databaseという3つのレイヤー構成になっていて、若干DDDぽさがあります
  • Daoにクエリをかける
    • Daoの部分はアノテーションにクエリを書いて諸々CRUD処理を行えます
    • MyBatisっぽさを僕は感じました
  • メソッドの結果としてFlowableを返せる
    • RxJavaと自然に連携させられます
@Query("SELECT * FROM connpass_feed_item")
Flowable<List<ConnpassFeedItem>> getAll();

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(ConnpassFeedItem... items);

サンプル

RxJava/Room両方を組み合わせたサンプルプロジェクトを置いておきますね。Entity/DaoをJavaで書いてますが、一応kotlinでもかけるようです(ただ、AnnotationProcessorを使うので少しはまりやすいという情報が)

感想

RxJavaと組み合わせていい感じに使えるSQLiteラッパーを探していたのですが、Roomがあまりにドンピシャで求めていたもので過ぎて興奮しすぎたので一度記事を書いてクールダウンしようと思い投稿しました。

まだalpha版という立ち位置らしいですが、おそらくRxJavaと組み合わせていく定番ライブラリになるのではないかと思ってます。