ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

データストアを使用してみる

GAEでのデータ保存

GAEでは基本Datastoreを提供している。
保存にはEntityとなるClassを生成して、Primary Keyと項目を指定してTableの様に使い、CRUDが可能だ。
ただし、データが0件の場合は対象Entityは消え存在しなくなるので注意

Entityの作成

EntityはClassがオブジェクト化され保存される単位となる物。
各カラムはJavaの基本型で保存可能

import java.util.Date;

import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Entity1 {
       //Keyカラムの指定(必須)
	@PrimaryKey private String email;
	
	//一般カラムの指定	
	@Persistent private String nickname;
	@Persistent private Date wakeupDate;
	@Persistent private int count;

	//コンストラクタ	
	public Alarm(String email, String nickname, Date wakeupDate) {
		this.email = email;
		this.nickname = nickname;
		this.wakeupDate = wakeupDate;
		this.count = 0;
	}
	
	//各値はコンストラクタで生成し、変更はPropertyを利用する。
	public String getEmail() { return email; }
	public String getNickname() { return nickname; }
	public void setNickname(String nickname) { this.nickname = nickname; }
	public Date getWakeupDate() { return wakeupDate; }
	public void setWakeupDate(Date wakeupDate) { this.wakeupDate = wakeupDate; }
	public int getCount() { return count; }
	public void setCount(int count) { this.count = count; }
}
  1. @PersistenceCapable : Classがデータオブジェクトで有ることを指定
  2. @PrimaryKey : PrimaryKey指定(1つ)
  3. @Persistent : 一般カラムの指定

データストアの操作のための準備

データ操作はPersistenceManagerを使いデータの生成・更新処理を行う
但し、PersistenceManagerクラスはInterfaceで有るためJDOHelperを使いInstanceを生成する必要がある。

そのためのクラスを定義する。

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {
	private static final PersistenceManagerFactory pmfInstance = 
		JDOHelper.getPersistenceManagerFactory("transactions-optional");
	private PMF() { }
	public static PersistenceManagerFactory get() {
		return pmfInstance;
	}
}

データのCRUD

上記で作成したPMFクラスを利用して、データの操作を行う

import javax.jdo.PersistenceManager;

//DataStore操作用Instance生成
PersistenceManager pm = PMF.get().getPersistenceManager();

//Dataの生成(Create)
Entity1 data = new Entity1(email.toLowerCase(), nickname, cal.getTime());
pm.makePersistent(data);

//Dataの取得(Read)
Entity1 data = pm.getObjectById(Entity1.class, email);

//Dataの更新(Update) : 同じkeyのデータが有った場合、上書き保存される
pm.makePersistent(data);

//Dataの削除(Delete)
pm.deletePersistent(data);

//Finally句でPersistenceManagerは閉じる
pm.close();

Queryを利用したデータの検索

Queryを利用し、Dataの絞り込み、整列が可能

import javax.jdo.PersistenceManager;
import javax.jdo.Query;

//DataStore操作用Instance生成
PersistenceManager pm = PMF.get().getPersistenceManager();

//DataのQueryを生成
Query query = pm.newQuery(Entity1.class);

//検索条件設定
query.setFilter("wakeupDate <= :currentDate");

//ソート順設定
query.setOrdering("wakeupDate");

//データ取得
List<Entity1> datas = (List<Entity1>) query.execute(new Date());

for (Entity1 item : datas) {
	//itemより、データの操作を行う
}