目次へ
GAEのデータストアにJDOでアクセスし、データの検索、挿入、削除、更新をする方法です。
データストアには、Persistence Managerというオブジェクトを使い、アクセスします。
|
■■■■Persistence Managerの取得
JDOによるデータストアからの検索、書き込みにはPersistence Managerというオブジェクトを使います。Persistence ManagerオブジェクトはPersistence Manager Factoryというファクトリオブジェクトを使って作成します。
下のPMFクラスはPersistence Manager Factoryのインスタンスを1つだけ作成するシングルトンです。
PMFクラス
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;
}
}
|
■■■■カインドの定義
JDOではアノテーション付きのクラスを定義することでカインドを定義します。下のSyouhinクラスはnameとpriceというプロパティとLong型のキーを持つSyouhinカインドを定義しています。
カインドとはRDBの表だと思ってください
- @PersistenceCapable このクラスがカインドを定義するためのクラスであることを示します。
- @PrimaryKey このフィールドがキーであることを示します
- @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) キーを自動で作成することを示します
- @Persistent このフィールドをデータストアへ書き込むことを示します
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.search.SortExpression.SortDirection;
@PersistenceCapable
public class Syouhin {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Long key; //自動で作成するキー
@Persistent
private String name; //商品名
@Persistent
private Integer price; //価格
//-------------------------------- getter setter
public Long getKey() {
return key;
}
public void setKey(Long key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
|
■■■■データの挿入
次のメソッドはsyouhinオブジェクトをデータストアに格納します格納するメソッド
public boolean insert(Syouhin syouhin) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(syouhin);
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
} finally {
pm.close();
}
}
|
■■■■JDOQLによる検索
次のメソッドはどちらも、データストアの中のSyouhinカインド内のすべてのエンティティを取得しますSingle-String JDOQLによる全検索
public List |
Declarative JDOQLによる全検索
public List |
キーを指定して検索(キー以外でも使える)
public Syouhin selectByKey(long number) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
//---キーを作成
Key key = KeyFactory.createKey(Syouhin.class.getName(), number);
//---そのキーのデータを取得
Syouhin syouhin = pm.getObjectById(Syouhin.class, key);
return syouhin;
} catch(Exception e) {
e.printStackTrace();
return null;
} finally {
pm.close();
}
}
|
条件を指定して検索(キー以外でも使える)
public List |
Single-String JDOQLによる条件検索
public List |
■■■■データの削除
次のメソッドはすべてのsyouhinオブジェクトをデータストアから削除しますSyouhinカインド内のすべてのエンティティを削除するメソッド
public boolean deleteAll() {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Syouhin.class);
List
|
選択した1つのSyouhinを削除するメソッド
public boolean deleteByKey(long number) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
//---キーを作成
Key key = KeyFactory.createKey(Syouhin.class.getName(), number);
//---そのキーのデータを取得
Syouhin syouhin = pm.getObjectById(Syouhin.class, key);
// 取得したものを削除
pm.deletePersistent(syouhin);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
pm.close();
}
}
|
■■■■データの更新
更新は、選択したオブジェクトを変更すればよい
public boolean update(Syouhin s) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
//---キーを作成しそのキーのデータを取得
Key key = KeyFactory.createKey(Syouhin.class.getName(), s.getNumber());
Syouhin syouhin = pm.getObjectById(Syouhin.class, key);
syouhin.setName(s.getName());
syouhin.setPrice(s.getPrice());
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
} finally {
pm.close();
}
}
|
にほんブログ村




