このエントリの続きです。あれから順調に開発は進み、だいたいやりたいことができるようになりました。
先日行われた 天下一「AndroidのORM」武道会(2015年版) - Qiita では好成績を残し、RealmにはかなわないもののSQLiteベースのORMとしてはトップクラスの速度を出しています。もっとも、RealmやGreenDAOに負けることがあるのは、ビルトイン以外の型(ベンチマークだと Date
)のサポートを十分に最適化していないためでしょう。とはいえORMは「使うのをためらうほど遅くない」ということが重要なので、Ormaはすでに十分なパフォーマンスであるといえます。
最近はパフォーマンスは一旦置きで、プロダクションで使えるようにするための機能追加を行っています。最近はこんな感じの機能を実装しました(順不同)。
- 基本的な has-one association / has-may association のサポート
- 型安全なクエリビルダ(condition query helpers)
- ListAdapterのための
get(int position)
など - 自動マイグレーションの強化
- SQLパーサの置き換え によるSQLite拡張構文を含んだDDLのサポート
- schema diffをcase insensitiveで行うように
- テーブルに任意の制約(constraints)を書けるように
- カラム定義における
PRIMARY KEY ON CONFLICT ...
とUNIQUE ON CONFLICT ...
のサポート(SQLiteの拡張機能) - FOREIGN KEY制約のサポート
- has-one associationで自動的に有効化
- ただし
ON UPDATE CASCADE ON DELETE CASCADE
のみで、他のオプションは必要性に応じて足していく
@Setter
/@Getter
でprivateフィールドをもつモデルを管理可能に- コンストラクタに
@Setter
アノテーションをつけることによってimmutableなモデルを管理可能に - TypeAdapterに BigInteger, BidDecimal, java.sql.Timestamp などを追加
タスクリストは github issues で管理しています。
Issues · gfx/Android-Orma · GitHub
v1.0.0までは互換性のないインターフェイスの変更があるかもしれませんが、よければ使ってみて意見をいただけると嬉しいです。
導入は以下のように既存のPOJOにアノテーションをつけるだけでDBに入れられるようになります(なおこのPRはクエリビルダ導入前のバージョンで、現在はクエリビルダを使っています)。
Timeline cache by gfx · Pull Request #27 · gfx/Android-Helium · GitHub