greenDAOがannotationベースになってさらに便利に

2016/11/05

AndroidにおけるORMの定番のひとつがgreenDAO。高速さがウリな半面、事前のコード生成が手間という難点がありました。Android Studioでgradle taskを使ってgreenDaoのDao生成を行う - きょこみのーとで解説されているみたいにGradleのTASK化することもできますがそれでもちょっと面倒です。

そんなgreenDAOですが、久々にチェックしたらversion3.0からannotationベースに変貌を遂げていました。

greenDAO 3 released - Open Source by greenrobot

Gradle Pluginがannotationからコードを生成してくれるので、使う側でコード生成を意識する必要がなくなりました。これは嬉しい。

簡単に使い方をまとめておきます。まずbuild.gradleに本体とプラグインを追加します。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }
}

apply plugin: 'org.greenrobot.greendao'

dependencies {
    compile 'org.greenrobot:greendao:3.2.0'
    compile 'org.greenrobot:greendao-generator:3.2.0'
}

Entityクラスにannotationを付与します。@EntityがSQLのテーブルになるわけですね。 コンストラクタとgetter/setterがない場合はgeneratorが勝手に追加してくれるみたい。

@Entity
public class Book {

    @Id
    private Long id;

    private String title;

    private String author;

    // getters and setters ...
}

あとは今までのgreenDAOと同じように使えます。やったね!

自分の場合、Applicationクラスで初期化したDaoSessionをDIでrepositoryクラスに渡す使い方が多いですね。

Applicationクラスではこんな感じで初期化します。

DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(this, "example-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();

Repository側はこんな感じ。

BookDao bookDao = daoSession.getBookDao();
List<Book> result = bookDao.loadAll();

日本だとOrmaとかRealm(ORMじゃないけど)とかの勢いが増してるように感じますが、個人的にはgreenDAOの癖のない感じが好きです。もともとサーバーサイドの人なのでSQLを書くのに抵抗がないのも大きいかも。




関連(するかもしれない)記事


おススメ