データストアって何?
データベースのようなもの
使い方 〜格納するクラスの作り方〜
簡単に言うと、クラスにアノテーションとKeyクラスのフィールドをちょっと加えるだけです。
SQLを使うDBではないので、DBの作成にSQLは不要です。
データストアではクラスにちょっとアノテーションを付けるだけで格納できます。ね、簡単でしょ。
まずはデータストアに格納するクラスを作ります。
例を以下に示します。
@PersistenceCapable(identityType = IdentityType.APPLICATION) //必須のおまじない。Eclipseで自動でインポートできない時があるので注意 public class TestBean { @PrimaryKey //主キー。ここの値でデータを一意な値として認識する @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) //システムが自動で値を割り振るおまじない private Key messageId; //主キーのクラスはcom.google.appengine.api.datastore.Keyを使用する @Persistent //主キーではないけど、データストアに格納したい値 private String message; //ただのゲッター。メソッドにはアノテーションは不要 public String getMessage() { return message; } //ただのセッター。メソッドにはアノテーションは不要 public void setMessage(String s) { message = s; } }
DataViewerで見た限りではデータはRDBと同じ状態で格納されるようです。
カラム名は@PrimaryKeyや@Persistentをつけたフィールド名と同じです。
使い方 〜データを格納する〜
public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { //データ作成 TestBean bean = new TestBean(); bean.setMessage("test"); //データをデータストアへ格納 PersistenceManagerFactory factory = JDOHelper.getPersistenceManagerFactory("transactions-optional"); PersistenceManager pm = factory.getPersistenceManager(); Transaction t = pm.currentTransaction(); t.begin(); //トランザクションの開始 pm.makePersistent(bean); //データを格納 t.commit(); //コミット //データストアからデータを取得 Query q = pm.newQuery(TestBean.class); @SuppressWarnings("unchecked") List<TestBean> print = (List<TestBean>)q.execute(); //データストアに格納されている全てのデータを取得 for(TestBean test : print) resp.getWriter().println(test.getMessage()); //表示 pm.close(); } catch(Exception e) { resp.getWriter().println(e.getMessage()); } } }
ここら辺は詳しく理解していませんが、とりあえず上記の例を実行すればデータストアにデータが入ります。
こんな風に↓
以上です。暇を見つけてメソッドの詳細についても書いていくつもりです。
データの格納2
PersistenceManager manager = factory.getPersistenceManager(); try { manager.makePersistent(id); } finally { manager.close(); }
データの更新
PersistenceManager.getObjectById()で値を取得する。
PersistenceManagerのclose()を実行する前にgetObjectById()で取得した値を書き換え、makePersistent()を使って格納しなおす。
PersistenceManager manager = factory.getPersistenceManager(); Test test = manager.getObjectById(Test.class, test.getKey()); try { test.set(〜); manager.makePersistent(test); } finally { manager.close(); }