Android用の新しいORMライブラリ Ollie を使う

Androidのデータベースを簡単に扱える「Ollie」というライブラリを使ってみました。
今まではActiveAndroidを利用していたのですが、パフォーマンス的にあまり早い方ではないらしく乗り換えを検討していました。(といっても体感レベルで遅いと感じたことはないですが。)

このOllieというライブラリはActiveAndroidと同じ作者が作成しているため、乗り換えコストが低いだろうと思い使ってみました。
https://github.com/pardom/Ollie

インストール

AndroidStudioを利用している場合、 app/build.gradle のdependenciesに

compile 'com.michaelpardo:ollie:0.3.1'
provided 'com.michaelpardo:ollie-compiler:0.3.1'

を追加してSyncします。

またandroid-aptのセットアップがまだであれば

apply plugin: 'android-apt'

apply plugin: 'com.android.application'の下に追加します。

これでライブラリの設定は完了です。

使い方

DB初期化

Ollie.with(getApplicationContext())
    .setName("test.db")
    .setVersion(1)
    .setLogLevel(Ollie.LogLevel.FULL)
    .init();

こんな感じのDB初期化コードを呼んであげます。
独自Applicationを作ってそこに初期化コード書いておくと確実ですが、ちょっと試す程度であれば最初に呼ばれるApplicationのonCreateとかに書いといても大丈夫です。DBを操作する前に呼ばれていれば多分問題ありません。

モデルを作る

次にモデルクラスを作ります。

@Table("notes")
class Note extends Model {
    @Column("title")
    public String title;
    @Column("body")
    public String body;
}

サンプルだとこんな感じ。これがSQLiteのテーブル構造にもなります。この辺はActiveAndroidと一緒ですね。

@Tableがこれがデータベースで管理するモデルである事を示すアノテーションで、引数がテーブル名になります。同様に@Columnがカラムを示すアノテーションです。他の引数に何が使えるかはまだ調べてません。ドキュメントがないのでテストコード読んだり、実ソース読んだりする必要がありそうです。ちょっと見た感じでは、モデルをさらに継承して違うテーブルを作るみたいなのも出来そうです。

データベースはこのクラスを元に自動的に作られるので、このModelの構造を変えるときは注意が必要です。開発時にはアンインストールしてDBごと消せば問題無いですが、リリース後モデルの構造を変えたい場合は適切なマイグレーションコードを書く必要があります。マイグレーションの仕方もActiveAndroidに似ていて自分でSQLコードを埋め込む仕様っぽいです。この辺は他のORMと比べると弱いですね。

データを保存してみる

モデルを定義してアプリをビルド・実行するとSQLiteのデータベースがすでに出来上がっています。CREATE TABLEとか一切要らないのが便利ですね。早速このデータベースにデータを保存してみましょう。

Note note = new Note();
note.title = "Test";
note.body = "Hello Ollie";
note.save();

インスタンスを作って、save()を呼び出してあげれば保存が完了します。すごく簡単ですね。
save()を呼ぶとnote.idにテーブルにキーが割り当てられます。なので同じインスタンスに対して何度saveを呼んでも別のレコードが挿入されることなくnoteを更新できるようになってます。

データを取り出してみる

保存したものを今度は取り出してみます。

List<Note> notes = Select.from(Note.class).fetch();

これですべてのノートを同期的に取り出せます。必要に応じてwhereだったりlimitだったりをチェーンすることも出来ます。ここでもまだドキュメントがないのでテストコードを漁りましょう。

1レコードのみ取り出したい場合は

Note note = Select.from(Note.class).fetchSingle();

で取り出せます。

同期的にDB操作するのが嫌だという場合は、fetchの代わりにobservableというメソッドを使えば非同期的で受け取り処理を書くことも出来るみたいです。

所感

まだ新しいライブラリなのでどれだけの事が出来るかは未知数ですが、データベースをこれだけ簡単に扱えるライブラリはとても魅力です。ActiveAndroidからの追加学習コストもほとんどなく、パフォーマンスの改善効果が受けられる(らしい)ので、このまましばらく使ってみたいと思います。

参考

天下一「AndroidのORM」武道会
Android向けORMの速度比較。残念ながらOllieは動かなかったようでベンチの対象にはなってません…。

Fri, 6 Feb 2015 07:53:02 +0000   |   Category:Android

関連記事

About Me

kimihiro-n

Androidアプリを中心にいろいろアプリ作ってます。
T N G

Products

放課後アプリ部
放課後アプリ部
個人アプリ開発者のための集客プラットフォーム作りました。 AndroidやiOSアプリのダウンロード数増加を無料で手伝います!

最速のJSON可視化・解析ツール
JSONを使った開発をスムーズにするためのツールです。 特定の値までのパスを簡単に取れます。
過去に作ったiOSアプリ
明日から本気出すタスク管理 for iOS
過去に作ったAndroidアプリ
明日から本気出すタスク管理 for Android Nagareboshi taplight
Others..

Search Articles