AndroidとORM

androidでORM(Object-relational mapping(mapper))を使うこと考えた場合、どのような選択があるのだろう。

ContentProvider

正確にはORMではないが、FileやSQLiteデータベースをオブジェクトとしてアプリケーションから操作できるという意味では、ORMと呼んでも良いと思う。 当然だが、標準の実装であり他のライブラリィを必要としないため、事足りる用途であればこれを使えば良いだろう。

gwtorm (http://android.git.kernel.org/?p=tools/gwtorm.git;a=summary)

AOSP(Android Open Source Project)中にあるORM。JDBCとProtocolBufferを使用しており、期待できそうなのだが、ドキュメントが殆ど無く、どんなものなのかよく分からない。

sqlitegen (http://code.google.com/p/sqlitegen/)

SQLiteのデータアクセスクラスを生成するEclipseプラグイン。Wikiを見る限りでは以下のようにアノテーションで修飾したインタフェースからデータベースにアクセスするためのクラスを生成するプロセッサとして動作するようだ。

    • 同サイトのExampleにあるコード片。
@TableInterface(ImplementingClassName="AbstractConnectionBean",TableName="CONNECTION_BEAN")
interface IConnectionBean {
    @FieldAccessor
    long get_Id();
    @FieldAccessor
    String getNickname();
    @FieldAccessor
    String getAddress();
    @FieldAccessor
    int getPort();
    @FieldAccessor
    String getPassword();
    @FieldAccessor
    String getColorModel();
    @FieldAccessor
    boolean getForceFull();
    @FieldAccessor
    String getRepeaterId();
}

アノテーションとコードジェネレータ又はコードエンハンサを使った手法は最近のORMでは一般的であり、同様のものを作ろうとしている開発者も多いだろう。 アノテーションの名前や属性を見るとその使用方法が予想できる。

うーん。もっと軽く、それでいてSQLiteをベアで使うよりもスマートな実装は無いだろうか。