DB(RDB)を使う:finderでmodel操作

このエントリはPlay frameworkひとりアドベントカレンダーの10日目です。

9日目でDBを使う準備ができたので、今日はデータを操作してみましょう。

modelを作る

昨日作ったクラスに属性を追加して使いましょう。

package models;

import javax.persistence.Entity;
import javax.persistence.Id;

import play.db.ebean.Model;

@Entity
public class Twowa extends Model {

	@Id
	public Long id;

	public String userId;

	public String contents;

}

modelにfinderを定義

EBeanを利用した操作をするために、各modelでfinderを定義する必要があります。

finderのテンプレは下記の通り。

  • Long@id な属性の型
  • Twowa は自身のクラス

です。

public static Finder find = new Finder(Long.class, Twowa.class);

ただまぁこれをチマチマ書くのは不毛な刺身たんぽぽなので、EclipseのCode Templateにしておきましょう。

Editor > Template で、下記をテンプレートと設定しておきましょう。

public static Finder <${id_class:var}, ${enclosing_type}> find = new Finder<${id_class}, ${enclosing_type}>(${id_class}.class,${enclosing_type}.class);

https://gist.github.com/3958509

使ってみよう

データ作成

Controllerで、インスタンス作って #save すればOK!
あらま!簡単!

	public static Result add() {
		Twowa twowa = new Twowa();
		twowa.userId = "myユーザ";
		twowa.contents = "ちょわー";
		twowa.createdAt = Calendar.getInstance().getTime();
		twowa.save();
		return redirect(routes.Application.index());
	}

データ読み込み

全部とる場合は…
.find.all() すればOK!
あらま!簡単!

		List twowas = Twowa.find.all();

PrimaryKey( @Id )でとる場合は…
.find.byId() すればOK!
あらま!簡単!

		Twowa twowa = Twowa.find.byId((long) 12345);

複雑な条件をつける場合は… .find.where().and|eq|between|contains|ge|gt|le|lt|in.findList() すればOK!
あらま!ちょっとムツカシイネー

		List twowas = Twowa.find.where().eq("user_id", "myユーザ").findList();

データ更新

find して save すればよろしい。

		Twowa twowa = Twowa.find.byId((long) 12345);
		twowa.contents = "///" + twowa.contents + "///";
		twowa.save();

データ削除

find して delete すればよろしい。

		Twowa.find.byId((long) 12345).delete();

See also