ORMラッパーDBFlow v3.0-beta1の使い方

More than 3 years have passed since last update.


ORMラッパーDBFlow v3.0-beta1の使い方

https://github.com/Raizlabs/DBFlow


インストール

1.gradleの設定

 TOPレベルのbuild.gradleのdependenciesに

 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'を追加

 allprojectsのrepositoriesに maven { url "https://jitpack.io" }を追加

 

 アプリレベルのbuild.gradleで

 apply plugin: 'com.android.application'の下に

 apply plugin: 'com.neenbedankt.android-apt'を追加

 dependenciesに下記を追加

 apt 'com.github.Raizlabs.DBFlow:dbflow-processor:3.0.0-beta1'

 compile "com.github.Raizlabs.DBFlow:dbflow-core:3.0.0-beta1"

 compile "com.github.Raizlabs.DBFlow:dbflow:3.0.0-beta1"

2.Applicationを継承したExampleApplicationクラスを作成

例としてAlertApplicationクラスを作成。

ここでDBを初期化


AlertApplication


package {your package}.alert;

import android.app.Application;
import com.raizlabs.android.dbflow.config.FlowManager;

/**
* アプリケーションクラス
*/

public class AlertApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
}
}


3.作成したapplicationクラスをmanifest.xmlに追加


<application
android:allowBackup="true"
・・・・
android:name="{your package}.AlertApplication">

4.DBの作成

DB名、versionを指定しDBを作成する。


AlertDb

import com.raizlabs.android.dbflow.annotation.Database;

/**
* Alert DB
*/

@Database(name = AlertDb.NAME, version = AlertDb.VERSION, generatedClassSeparator = "_")
public class AlertDb {
public static final String NAME = "AlertDb";
public static final int VERSION = 1;
}


5.BaseModelを継承しテーブルを作成


Recipient

import com.raizlabs.android.dbflow.annotation.Column;

import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.structure.BaseModel;

/**
* 宛先テーブル
*/

@Table(database = AlertDb.class)

public class Recipient extends BaseModel {

@PrimaryKey(autoincrement = true)
public long id;

@Column
public String name;

@Column
public String email;

@Column
public Integer is_delivery;
}


6.レコードの取得とインサートメソッドの作成



import android.util.Log;

import com.lilly.happylife.alert.model.Recipient;
import com.lilly.happylife.alert.model.Recipient_Table;
import com.raizlabs.android.dbflow.sql.language.SQLite;

/**
* 宛先リポジトリ
*/

public class RecipientRepository {

/**
* Recipientテーブルにインサート
*
* @param String name 氏名
* @param String email メールアドレス
*/

public void insert(String name, String email) {
Recipient recipient = new Recipient();
recipient.name = name;
recipient.email = email;
recipient.is_delivery = 1;
recipient.save();
}

/**
* プライマリーキーで宛先テーブルを検索して取得
*
* @param Long _id ID
*
* @return Recipient recipient Recipientオブジェクト
*/

public Recipient getRecipient(Long id) {
Recipient recipient = SQLite.select().from(Recipient.class)
.where(Recipient_Table.id.eq(id)).and(Recipient_Table.is_delivery.eq(1)).querySingle();

String query = SQLite.select().from(Recipient.class)
.where(Recipient_Table.id.eq(id)).and(Recipient_Table.is_delivery.eq(1)).getQuery();

Log.d("DbQuery", query);
return recipient;
}
}


インサートはサーバサイドのORMと同じような感じで使える

取得は最初の条件はwhereを使い次からはandメソッド

fromメソッドにテーブルのクラスファイルを指定

カラムを条件に使うときはテーブル_Tableのstaticプロパティを使う

実行したクエリはgetQueryで取得

もちろん書いていないが、生SQLもできる

このDBFlowはサーバサイドで使用していたORMラッパーに近い。

楽!!!

Recipient_Table(確認したほうが良い!!!)はコンパイルした後にRecipient.classと同じ階層に自動生成される。

Recipient_Adapter、Recipient_Containerも自動生成される。