データストアを使用してみる
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; } }
- @PersistenceCapable : Classがデータオブジェクトで有ることを指定
- @PrimaryKey : PrimaryKey指定(1つ)
- @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より、データの操作を行う }