Google App Engine + JDO + Spring MVC, exemple CRUD
Note
Ce tutoriel est plus sur le guide pratique, veuillez vous référer à ceofficial Using JDO in datastore pour des explications détaillées.
Consultez les extraits de code suivants pour effectuer CRUD sur la banque de données GAE, à l'aide deJava Data Objects(JDO). Annotez simplement le client avecJDO annotation et effectuez le CRUD viaPersistenceManager.
Add
Customer c = new Customer(); c.setName(name); PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(c); } finally { pm.close(); }
Chercher
Recherchez «Client» où nom == «exemple».
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(); }
Recherchez "Client" où nom == "exemple" et email == "[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(); }
Renvoyer la liste des enregistrements clients.
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(); }
Mise à jour
Pour mettre à jour, récupérez l'objet existant et modifiez-le.
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(); }
Effacer
PersistenceManager pm = PMF.get().getPersistenceManager(); try { Customer c = pm.getObjectById(Customer.class, key); pm.deletePersistent(c); } finally { pm.close(); }
Exemple GAE + Spring MVC + CRUD
Ok, nous allons maintenant vous montrer une application Web simple développée à l'aide de Spring MVC dans le style REST, utilisant JDO pour stocker des données dans le magasin de données.
-
SDK Java de Google App Engine 1.6.3.1, JDO 2.3
-
Printemps 3.1.1
-
JDK 1.6
-
Eclipse 3.7 + Plugin Google pour 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
Cet exemple est aussi simple que possible, pour vous montrer comment utiliser JDO pour effectuer CRUD uniquement, pas de couches comme DAO ou BO, pas de validation ou de notification de message de la réussite ou de l'échec de l'action .
1. Client
Annoter l'objet client avec l'annotation 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
Créez une classe PersistenceManager singleton.
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. Contrôleur de printemps
Le contrôleur à ressort, de style REST, effectue l'opération CRUD. Le code doit être explicite.
Fichier: 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. Pages JSP
Pages JSP pour afficher le client et effectuer l'ajout, la mise à jour et la suppression.
Fichier: 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 |
Fichier: add.jsp
Add Customer
Fichier: 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
Terminé, voir la démo pour vous montrer le flux de travail de l'application Web.
1. Une page de liste, pour afficher la liste des clients existants.
2. Dans la page de liste, cliquez sur le lien "Ajouter un client" pour afficher la page Ajouter un client, indiquez un nouveau client, nom = "example", email = "[email protected]" et cliquez sur "Ajouter " bouton.
3. Enregistré le client, il reviendra à la page de liste.
4. Essayez le lien de mise à jour, il affichera les données du client sélectionné, mettra à jour l'e-mail vers «[email protected]» et cliquez sur le bouton de mise à jour.
5. L'e-mail est mis à jour et redirige vers la page de liste.
6. Pour supprimer le client, il suffit de cliquer sur le lien «supprimer».
Télécharger le code source
En raison de la grande taille du fichier, tous les pots Spring MVC et GAE sont exclus.
Télécharger -GAE-SpringMVC-JDO-example.zip (22 KB)