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 { Listresults = (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 { Listresults = (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"); Listresults = 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 { Listresults = (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)