greenDAOがannotationベースになってさらに便利に
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を書くのに抵抗がないのも大きいかも。
関連(するかもしれない)記事
おススメ