Green DAOの使い方を出来るだけ丁寧にまとめました
Green DAOについて
androidでORマッパーを使おうとすると,選択肢は
- ActiveAndroid
- ORMLite
- Green DAO
くらいが有名で私は割りとActiveAndroidを使っていたのですが,いろいろあって使い勝手が悪いように感じたので,今回 ORMLiteを高速化したGreen DAOの導入について紹介します.
参考にさせていただいたブログ
Green DAO 導入の手順
- Javaのプロジェクト(andoroidじゃないよ) で Green DAOのgenジェネレータを作成する
- androidのプロジェクトにsrc-genを吐かせる
- DAOオブジェクトを呼び出してデータベースを操作する
Green DAOは結構下準備が必要です.ActiveAndroidなどを使ってるとジェネレーターを使うっていう発想がなくて,ここらへんで結構悩んでました.私はサンプルコードの
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
というコメントアウトを見て src-genはジェネレータに吐かせるのかとやっと理解しました.
ジェネレータを作成する
とりあえず 必要そうなjarをダウンロードしてきます.
(リンクはすべて[http://d.hatena.ne.jp/cevid_cpp/20130406/1365246484:title:bookmark] さんのブログを参考にさせて頂きました )
eclipseなどで javaプロジェクトを作成し,いまダウンロードしてきたjarにパスを通します.
eclipseでjarのパスを通す方法
"パスを通す" というのは外部のライブラリをeclipseに認識させるための作業です.
- まず jarをプロジェクトの libsフォルダにコピーします.
- eclipseにjarを認識させるためにプロジェクトを右クリックしてリフレッシュを選択します.
- もう一度右クリックをしプロパティを開きます.
- Java Build Pathを選択し,Add JARsからjarを追加します.
(おすすめはしませんが,私はどれが必要かわからないので全部ぶっこみました. バージョン違いのほぼ同じjarなどを複数入れた場合ビルドが通らなくなったりするのである程度は注意は必要です)
パスが通ったらこんな感じにコードを書きます.
public class GreenDaoGenerator { public static void main(String[] args) throws Exception { Schema schema = new Schema(3, "com.example"); addEntitiy(schema); new DaoGenerator().generateAll(schema, "../YourAndroidProjectName/src-gen"); } private static void addaddEntitiy(Schema schema) { Entity entity = schema.addEntity("XXX"); //XXXはテーブル名 entity.addIdProperty().autoincrement(); //以下に必要なプロパティを記述 entity.addStringProperty("thumnail").notNull(); entity.addStringProperty("title").notNull(); entity.addStringProperty("link").notNull(); entity.addStringProperty("archives"); } }
ジェネレータのコードは基本的にこんな感じなので適宜変更すれば使えると思います.
そこまで出来たらジェネレータのコードを実行しましょう!! 自分のandroidプロジェクトに"src-gen"フォルダが作成されていれば成功です.
androidのプロジェクトで呼び出してみる.
まずは onCreateらへんでDAOオブジェクトを呼び出します.
public SanpleEntityDao initDatabase(Context context){ SQLiteDatabase db = new DaoMaster.DevOpenHelper(context, "XXX", null).getWritableDatabase(); //XXXはデータベース名 DaoSession daoSession = new DaoMaster(db).newSession(); SanpleEntityDao entryDao = daoSession.getSanpleEntityDao(); return entryDao; }
基本的な処理
インサート
SanpleEntity entity = new SampleEntity(); // todo entityDao.insert(entity);
デリート
entityDao.deleteByKey(id);
リード
List<Entity> entities = entityDao.loadAll();
こんな感じで一度使い方がわかったらかなり便利に使えるのでぜひ 使って見てください (・∀・)