読者です 読者をやめる 読者になる 読者になる

たかずんドットコム

文系Webプログラマから生み出される杜撰なTipsと日常の記録

Green Daoを導入してSQLiteの利用を簡便化 ~ジェネレータ導入~

前回やることリストに上げていたGreenDaoの導入をしました。
AndroidSQLiteのORMライブラリは結構あるんですけど、その中でもとにかく早いといわれているGreenDaoを選択しました。リフレクションを多用するものや、そもそもSQLを利用しないコンセプトのものが出始めている中で、独自のクエリーをかなりの自由度で実装できて、尚且つ軽いというのは非常に良いライブラリだと感じます。

何はともあれ、gradleで導入

dependencies {
    // ...etc libs
    compile 'de.greenrobot:greendao:1.3.7'
}

これでGreenDaoを利用する環境は整いました。
お次は、GreenDaoで利用するエンティティとそのマネージャーを作成するために、GreenDaoGeneratorなるJavaプロジェクトを作成します。

とりあえず以下のブログ記事が参考になりますので並行して参照してください。

GreenDaoGeneratorプロジェクトを作ってみる

上記記事に沿って導入してみました。eclipseに作ったプロジェクト階層はこんな感じ。
f:id:takazune:20150218114029j:plain

libsフォルダに記事内で紹介されているgreendao、greendao-generator、freemarker.jarの3つを入れて、それぞれを外部jarとしてビルドパスに組み入れます。
GreenDaoGenerator.javaの中身はこんな感じ。

public class GreenDaoGenerator {

    public static void main(String[] args)  throws Exception {
        Schema schema = new Schema(3, "hoge.hoge.db");
        addListItem(schema);
        new DaoGenerator().generateAll(schema, "./");

    }

    private static void addListItem(Schema schema) {
        Entity listItem = schema.addEntity("ListItem");
        listItem.addIdProperty().autoincrement();
        listItem.addStringProperty("listVal").notNull();
        listItem.addLongProperty("position").notNull();
        listItem.addDateProperty("updateDate").notNull();
        listItem.addDateProperty("createDate").notNull();

        Entity taskItem = schema.addEntity("TaskItem");
        taskItem.addIdProperty().autoincrement();
        Property listItemId = taskItem.addLongProperty("listItemId").notNull().getProperty();
        taskItem.addStringProperty("taskVal").notNull();
        taskItem.addLongProperty("position").notNull();
        taskItem.addDateProperty("updateDate").notNull();
        taskItem.addDateProperty("createDate").notNull();

        taskItem.addToOne(listItem, listItemId);
        ToMany listItemToTaskItem = listItem.addToMany(taskItem, listItemId);
        listItemToTaskItem.setName("tasks");
    }
}

あってるかどうかわかりませんが、これでlistItem,taskItemという2つのテーブルが作られます。

new DaoGenerator().generateAll(schema, "./");

で階層を自身のプロジェクト直下を指定しており、このjavaを実行するとプロジェクト直下に(hoge.hoge.db)ディレクトリが作られて、その中にDAOが生成されます。あとは、出来上がったそれをandroidのプロジェクトにぶち込めばOK。ジェネレーターはaddメソッドを切り替えれば他のプロジェクト用のDAOもすぐ作れるので、一度作っておくと楽です。

アンドロイドのプロジェクトで利用してみる

次回の記事で生成したDAOを使ってDBにアクセス出来るようにします。