イモケンピウスの辞書

脳の記憶容量がフロッピーディスク2枚分しかないのでここに残しておくことにしました。Android、Unityについての記事が多いです

AndroidStudioでGreenDaoジェネレーター作成

はじめに

AndroidでDBを操作する時に使用するSQLite。 普通に使うと管理とか色々面倒です。 そこでGreenDao。いわゆるORMってやつです。

今回はAndroidStudioのプロジェクトにGreenDaoを導入してみます。 GreenDaoでDBを操作する段階に進む前に、 まずジェネレーターを作成して、 ジェネレーターにDBのテーブル内容に合わせたORMを作成させねばなりません。 逆に言えばジェネレーターを作成して、ORMを作ってしまえば導入完了どっからでもかかってこいや状態になるわけですね。 では、導入です。

導入してやんよ

まずはプロジェクトの作成(すでにプロジェクトを作成してる人はSKIP)

とりあえずプロジェクトを作成しましょう。

Java Library を作成

ジェネレーターはJavaLibraryとして作成します。 プロジェクトフォルダのメニューから

new > Module

ウィンドウが表示されるので Java Library を選択して next 情報を色々聞かれるので、ひとまず

  • Library name: daolib
  • Java package name : そのまま
  • Java class name : MyDaoGenerator

これでいきます。もし違うのがよければ、この後のステップではそれぞれ読み替えておすすみくだされ。 入力が済んだら Finish でLibraryを作成してください。 プロジェクト直下に daolib が作成されてるはずです。 念のため、同じくプロジェクト直下の setting.gradle の中身を確認してみてください

include ':app', ':daolib'

↑このようにdaolib の記載があればミッションコンプリート。

build.gradle の編集

次は作成した daolib フォルダの中の build.gradle ファイルを編集します。 といっても一行足すだけです。

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
+  compile 'de.greenrobot:greendao-generator:1.3.1'
}

compile 'de.greenrobot:greendao-generator:1.3.1 ↑これを dependencies の中にぶち込みましょう。ぶちこんだら gradleをsyncさせましょう

ジェネレーターをカスタマイズ

ここで肝心要のジェネレーター様をカスタマイズします。 というのもジェネレーターのクラス自体は daolib Library を作成したタイミングで daolib/src の中に MyDaoGenerator として作成されています。 中身を見るとクラスの宣言以外は空っぽの「好きにやっちゃって」状態。 なので下記コードをまるっとコピペして全部はっつけてください。

package com.example;

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Property;
import de.greenrobot.daogenerator.Schema;
import de.greenrobot.daogenerator.ToMany;

public class MyDaoGenerator {
    public static void main(String[] args) throws Exception {
        Schema schema = new Schema(1000, "de.greenrobot.daoexample");

        addNote(schema);
        addCustomerOrder(schema);

        new DaoGenerator().generateAll(schema, "app/src-gen");
    }

    private static void addNote(Schema schema) {
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        note.addStringProperty("comment");
        note.addDateProperty("date");
    }

    private static void addCustomerOrder(Schema schema) {
        Entity customer = schema.addEntity("Customer");
        customer.addIdProperty();
        customer.addStringProperty("name").notNull();

        Entity order = schema.addEntity("Order");
        order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
        order.addIdProperty();
        Property orderDate = order.addDateProperty("date").getProperty();
        Property customerId = order.addLongProperty("customerId").notNull().getProperty();
        order.addToOne(customer, customerId);

        ToMany customerToOrders = customer.addToMany(order, customerId);
        customerToOrders.setName("orders");
        customerToOrders.orderAsc(orderDate);
    }

}

中身の解説としては Note, Customer, Order っていうテーブルのORM作成しちゃってよジェネレーター。といったところです。 こちらの内容を参考にみなさんのテーブルに合わせたジェネレーターを作成してください。

吐き出されるORM用のフォルダ作成

ジェネレートを実行するとその内容に応じてファイルが生成されます。 それをどこに生成するかはこちらで決めることができます。
さきほど上記でコピペした MyDaoGenerator の "app/src-gen"この記述が保存先になります。

なので プロジェクトフォルダ/app/ に src-gen フォルダを新規作成

これでOKです。

ジェネレートさせる

いよいよクライマックスです。 ジェネレーターをジェネレートできるようにします。 トップにあるメニューバーの

Run > Edit Configurations...

ウィンドウが開くので、左上の「+」を押して Application を選択 右の設定項目に

  • Name: greenDao
  • Main Class: com.example.MyDaoGenerator
  • Working directory: プロジェクトフォルダ
  • Use classpath of module: daolib

このように設定してエラーでなければ OK これであとはジェネレートさせるだけです。 ジェネレートを行うには、トップにあるメニューバーの Run をクリック

Run 'greenDao'

が一番頭に表示されているのでクリック。 するとジェネレートが実行され、ジェネレーターがいいとこ見せてやんよと言わんばかりの熱い生成作業を行います。

Process finished with exit code 0

と表示されていればジェネレート終了です。

先ほど作成した

プロジェクトフォルダ/app/src-gen

の中身を確認してみてください。 色々ファイルが作られてたらジェネレーターがいい仕事した証拠です。グッジョブジェネレーター。