low-level APIを使ったデータアクセス
すごい。
shin1ogawaさんの以下のWikiを見てlow-level APIを使ったデータアクセスを試してみたんだけど。すごい分かりやすい&めちゃ簡単。
https://sites.google.com/a/topgate.co.jp/systemsolution/Home/googleappengine/datastore-lowlevelapi
なにせ、EclipseのGoogleプラグインのプロジェクトを作ってServletに直接データアクセスのテストを書いてみたんだけど、5分で出来た。
package sample; import java.io.IOException; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.FetchOptions; import com.google.appengine.api.datastore.PreparedQuery; import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.Transaction; import com.google.appengine.api.urlfetch.HTTPRequest; @SuppressWarnings("serial") public class LLATestServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DatastoreService datastoreService = DatastoreServiceFactory .getDatastoreService(); if (req.getParameter("content") != null) { save(req, datastoreService); } resp.setContentType("text/plain"); // 検索 Query q = new Query("todo"); // KIND:todoを検索 PreparedQuery pq = datastoreService.prepare(q); List<Entity> list = pq.asList(FetchOptions.Builder.withOffset(0)); resp.getWriter().println("Hello, world"); for (Entity e: list) { resp.getWriter().println(e.getProperty("content") + " : " + e.getProperty("createdAt")); } } private void save(HttpServletRequest req, DatastoreService datastoreService) { // 保存 Entity todo = new Entity("todo"); todo.setProperty("content", req.getParameter("content")); todo.setProperty("createdAt", new Date()); Transaction transaction = datastoreService.beginTransaction(); try { datastoreService.put(todo); transaction.commit(); } finally { if (transaction.isActive()) { transaction.rollback(); } } } }
ちなみにhttp://localhost:8080/llatest?content=aaaaとやったらその内容と作成日を登録して、最後に登録されてる内容を出すっていう簡単なサンプルです。
いや、それでも最初にしては、はまる所もなく素直に出来た。不思議。結構面倒かなと思ってたんだけど、食わず嫌いだね。ひがさんのSlim3がlow-level API対応になるのを待とうと思ったんだけど。これはすぐにこっち手をつけていいかも。
あ、でも今日見たらSlim3のソースにlow-level APIに関するクラスたちが追加されてたから、もうすぐ使えるようになるのかもしれないけど。悩ましい。