Google App Engine + JDO + Spring MVC、CRUDの例
Note
このチュートリアルは練習ガイドの詳細です。詳細な説明については、このofficial Using JDO in datastoreを参照してください。
Java Data Objects(JDO)を使用してGAEデータストアでCRUDを実行するには、次のコードスニペットを参照してください。 顧客にJDO annotationで注釈を付け、PersistenceManagerを介してCRUDを実行するだけです。
Add
Customer c = new Customer();
c.setName(name);
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(c);
} finally {
pm.close();
}
サーチ
name ==“ example”である“ Customer”を検索します。
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(Customer.class);
q.setFilter("name == nameParameter");
q.setOrdering("date desc");
q.declareParameters("String nameParameter");
try {
List results = (List) q.execute("example");
//...
} finally {
q.closeAll();
pm.close();
}
名前==「例」および電子メール==”[email protected]”である「顧客」を検索します。
Query q = pm.newQuery(Customer.class);
q.setOrdering("date desc");
q.setFilter("name == nameParameter && email == emailParameter");
q.declareParameters("String nameParameter, String emailParameter");
try {
List results = (List) q.execute("example", "[email protected]");
//...
} finally {
q.closeAll();
pm.close();
}
顧客レコードのリストを返します。
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(Customer.class);
q.setOrdering("date desc");
List results = null;
try {
results = (List) q.execute();
if (!results.isEmpty()) {
// good for listing
}
} finally {
q.closeAll();
pm.close();
}
更新
更新するには、既存のオブジェクトを取得して変更します。
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Customer c = pm.getObjectById(Customer.class, key);
c.setName(name);
c.setEmail(email);
c.setDate(new Date());
} finally {
pm.close();
}
削除する
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Customer c = pm.getObjectById(Customer.class, key);
pm.deletePersistent(c);
} finally {
pm.close();
}
GAE + Spring MVC + CRUDの例
それでは、JSPを使用してデータストアにデータを保存する、RESTスタイルのSpring MVCを使用して開発された簡単なWebアプリケーションを紹介します。
-
Google App Engine Java SDK 1.6.3.1、JDO 2.3
-
春3.1.1
-
JDK 1.6
-
Eclipse 3.7 + Eclipse用Googleプラグイン
P.S Use Google Plugin for Eclipse to create a web application project template, it will create and configure jdoconfig.xml for you automatically.
Note
この例は、JDOを使用してCRUDのみを実行する方法、DAOやBOのようなレイヤーなし、成功または失敗したアクションの検証またはメッセージ通知なしを示すために、可能な限り単純にしています。 。
1. 顧客
CustomerオブジェクトにJDOアノテーションを付けます。
package com.example.model;
import java.util.Date;
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;
@PersistenceCapable
public class Customer {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
@Persistent
private String email;
@Persistent
private Date date;
//getter and setter methods
}
2. PersistenceManager
シングルトンPersistenceManagerクラスを作成します。
package com.example;
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;
}
}
3. スプリングコントローラー
RESTスタイルのSpringコントローラーは、CRUD操作を実行します。 コードは一目瞭然です。
ファイル:CustomerController.java
package com.example.controller;
import java.util.Date;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.example.PMF;
import com.example.model.Customer;
@Controller
@RequestMapping("/customer")
public class CustomerController {
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String getAddCustomerPage(ModelMap model) {
return "add";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView add(HttpServletRequest request, ModelMap model) {
String name = request.getParameter("name");
String email = request.getParameter("email");
Customer c = new Customer();
c.setName(name);
c.setEmail(email);
c.setDate(new Date());
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(c);
} finally {
pm.close();
}
return new ModelAndView("redirect:list");
}
@RequestMapping(value = "/update/{name}", method = RequestMethod.GET)
public String getUpdateCustomerPage(@PathVariable String name,
HttpServletRequest request, ModelMap model) {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(Customer.class);
q.setFilter("name == nameParameter");
q.setOrdering("date desc");
q.declareParameters("String nameParameter");
try {
List results = (List) q.execute(name);
if (results.isEmpty()) {
model.addAttribute("customer", null);
} else {
model.addAttribute("customer", results.get(0));
}
} finally {
q.closeAll();
pm.close();
}
return "update";
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public ModelAndView update(HttpServletRequest request, ModelMap model) {
String name = request.getParameter("name");
String email = request.getParameter("email");
String key = request.getParameter("key");
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Customer c = pm.getObjectById(Customer.class, key);
c.setName(name);
c.setEmail(email);
c.setDate(new Date());
} finally {
pm.close();
}
// return to list
return new ModelAndView("redirect:list");
}
@RequestMapping(value = "/delete/{key}", method = RequestMethod.GET)
public ModelAndView delete(@PathVariable String key,
HttpServletRequest request, ModelMap model) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Customer c = pm.getObjectById(Customer.class, key);
pm.deletePersistent(c);
} finally {
pm.close();
}
// return to list
return new ModelAndView("redirect:../list");
}
// get all customers
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String listCustomer(ModelMap model) {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(Customer.class);
q.setOrdering("date desc");
List results = null;
try {
results = (List) q.execute();
if (results.isEmpty()) {
model.addAttribute("customerList", null);
} else {
model.addAttribute("customerList", results);
}
} finally {
q.closeAll();
pm.close();
}
return "list";
}
}
4. JSPページ
顧客を表示し、追加、更新、および削除を実行するJSPページ。
ファイル:list.jsp
<%@ page import="java.util.List" %>
<%@ page import="com.example.model.Customer" %>
<%@ page import="com.google.appengine.api.datastore.KeyFactory" %>
GAE + Spring 3 MVC REST + CRUD Example with JDO
Function : Add Customer
All Customers
| Name | Created Date | Action | |
| <%=c.getName() %> | <%=c.getEmail() %> | <%=c.getDate() %> | Update | Delete |
ファイル:add.jsp
Add Customer
ファイル:update.jsp
<%@ page import="com.example.model.Customer" %>
<%@ page import="com.google.appengine.api.datastore.KeyFactory" %>
Update Customer
<%
Customer customer = new Customer();
if(request.getAttribute("customer")!=null){
customer = (Customer)request.getAttribute("customer");
}
%>
5. Demo
完了しました。Webアプリケーションのワークフローを示すデモをご覧ください。
1. 既存の顧客のリストを表示するリストページ。

2. リストページで、「顧客の追加」リンクをクリックして顧客の追加ページを表示し、新しい顧客を入力します。名前=「example」、電子メール=「[email protected]」、「追加」をクリックします。 」ボタン。

3. 顧客を保存すると、リストページに戻ります。

4. リンクを更新してみてください。選択した顧客のデータが表示され、メールが「[email protected]」に更新され、更新ボタンをクリックします。

5. メールが更新され、リストページにリダイレクトされます。

6. 顧客を削除するには、「削除」リンクをクリックするだけです。
ソースコードをダウンロード
ファイルサイズが大きいため、すべてのSpring MVCおよびGAE jarは除外されます。
ダウンロード–GAE-SpringMVC-JDO-example.zip(22 KB)