Google App Engine + JDO + Spring MVC, CRUD-Beispiel
Note
Dieses Tutorial enthält weitere Informationen zum Übungshandbuch. Weitere Informationen finden Sie in diesemofficial Using JDO in datastore.
Weitere Informationen zum Ausführen von CRUD für GAE-Datenspeicher mitJava Data Objects(JDO) finden Sie in den folgenden Codeausschnitten. Kommentieren Sie den Kunden einfach mitJDO annotation und führen Sie die CRUD überPersistenceManager durch.
Add
Customer c = new Customer(); c.setName(name); PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(c); } finally { pm.close(); }
Suche
Suchen Sie nach "Kunde", wobei Name == "Beispiel".
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(); }
Suchen Sie nach "Kunde", wobei Name == "Beispiel" und E-Mail == "[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(); }
Liste der Kundendatensätze zurückgeben.
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(); }
Aktualisieren
Holen Sie sich zum Aktualisieren ein vorhandenes Objekt und ändern Sie es.
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(); }
Löschen
PersistenceManager pm = PMF.get().getPersistenceManager(); try { Customer c = pm.getObjectById(Customer.class, key); pm.deletePersistent(c); } finally { pm.close(); }
GAE + Spring MVC + CRUD Beispiel
Ok, jetzt zeigen wir Ihnen eine einfache Webanwendung, die mit Spring MVC im REST-Stil entwickelt wurde und JDO zum Speichern von Daten im Datenspeicher verwendet.
-
Java SDK 1.6.3.1, JDO 2.3 von Google App Engine
-
Frühling 3.1.1
-
JDK 1.6
-
Eclipse 3.7 + Google Plugin für Eclipse
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
Dieses Beispiel ist so einfach wie möglich gehalten, um Ihnen zu zeigen, wie Sie JDO verwenden, um nur CRUD auszuführen, keine Ebenen wie DAO oder BO, keine Validierung oder Benachrichtigung über den Erfolg oder eine fehlgeschlagene Aktion .
1. Kunde
Kommentieren Sie das Kundenobjekt mit einer JDO-Anmerkung.
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
Erstellen Sie eine Singleton-PersistenceManager-Klasse.
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. Federkontroller
Die Federkontrolle im REST-Stil führt die CRUD-Operation durch. Der Code sollte selbsterklärend sein.
Datei: 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-Seiten
JSP-Seiten zum Anzeigen des Kunden und zum Hinzufügen, Aktualisieren und Löschen.
Datei: 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 |
Datei: add.jsp
Add Customer
Datei: 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
Fertig, sehen Sie sich die Demo an, um den Workflow der Webanwendung zu zeigen.
1. Eine Listenseite, um die Liste der vorhandenen Kunden anzuzeigen.
2. Klicken Sie auf der Listenseite auf den Link "Kunde hinzufügen", um die Seite "Kunden hinzufügen" anzuzeigen, geben Sie einen neuen Kunden ein, Name = "example", E-Mail = "[email protected]" und klicken Sie auf "Hinzufügen" " Taste.
3. Der Kunde wurde gespeichert und kehrt zur Listenseite zurück.
4. Versuchen Sie es mit einem Update-Link. Daraufhin werden die Daten des ausgewählten Kunden angezeigt, die E-Mail auf "[email protected]" aktualisiert und auf die Schaltfläche "Update" geklickt.
5. Die E-Mail wird aktualisiert und zur Listenseite zurückgeleitet.
6. Um den Kunden zu löschen, klicken Sie einfach auf den Link "Löschen".
Quellcode herunterladen
Aufgrund der großen Dateigröße sind alle Spring MVC- und GAE-Gläser ausgeschlossen.
Herunterladen -GAE-SpringMVC-JDO-example.zip (22 KB)