Google App Engine + Spring MVC, exemple CRUD avec api de bas niveau de magasin de données

Google App Engine + Spring MVC, exemple CRUD avec API de bas niveau de banque de données

GAE datastore
Reportez-vous à ce «https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore[Using datstore guide]» officiel pour comprendre ce qu'est la banque de données GAE.

Consultez les extraits de code suivants pour effectuer CRUD pour la banque de données Google App Engine, Java, à l'aide d'une API de bas niveau.

Add

Stockez un client dans le magasin de données, avec "nom" comme clé.

    Key customerKey = KeyFactory.createKey("Customer", "your name");
    Entity customer = new Entity("Customer", customerKey);
    customer.setProperty("name", "your name");
    customer.setProperty("email", "your email");

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.put(customer); //save it

Renvoyez 10 clients sous forme de liste.

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("Customer").addSort("date", Query.SortDirection.DESCENDING);
    List customers = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(10));

Trouvez et renvoyez un client avec un filtre correspondant.

    Query query = new Query("Customer");
    query.addFilter("name", FilterOperator.EQUAL, "your name");
    PreparedQuery pq = datastore.prepare(query);
    Entity customer = pq.asSingleEntity();

FilterOperator.EQUAL
Jouez à ces filtres, il a peu d'options de condition, comme moins de, super que et etc.

Mise à jour

Pour mettre à jour, il suffit de modifier l'entité existante et de l'enregistrer à nouveau.

    Query query = new Query("Customer");
    query.addFilter("name", FilterOperator.EQUAL, "your name");
    PreparedQuery pq = datastore.prepare(query);
    Entity customer = pq.asSingleEntity();

    customer.setProperty("name", name);
    customer.setProperty("email", email);

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        datastore.put(customer); //GAE will know save or update

Effacer

Pour supprimer, vous avez besoin de la clé d'entité.

    Query query = new Query("Customer");
    query.addFilter("name", FilterOperator.EQUAL, name);
    PreparedQuery pq = datastore.prepare(query);
    Entity customer = pq.asSingleEntity();

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    datastore.delete(customer.getKey()); //delete it

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, manipuler des données dans le magasin de données Google App Engine, en utilisant les API de bas niveau ci-dessus.

  1. SDK Java de Google App Engine 1.6.3.1

  2. Printemps 3.1.1

  3. JDK 1.6

  4. Eclipse 3.7 + Plugin Google pour Eclipse

Note
Cet exemple est aussi simple que possible, pour vous montrer comment 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. Contrôleur de printemps

Contrôleur à ressort, style REST, pour afficher la page Web et effectuer le CRUD. Le code doit être explicite.

Fichier: CustomerController.java

package com.example.controller;

import java.util.Date;
import java.util.List;

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.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.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;

@Controller
@RequestMapping("/customer")
public class CustomerController {

    @RequestMapping(value="/addCustomerPage", 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");

            Key customerKey = KeyFactory.createKey("Customer", name);

        Date date = new Date();
                Entity customer = new Entity("Customer", customerKey);
                customer.setProperty("name", name);
                customer.setProperty("email", email);
                customer.setProperty("date", date);

                DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
                datastore.put(customer);

                return new ModelAndView("redirect:list");

    }

    @RequestMapping(value="/update/{name}", method = RequestMethod.GET)
    public String getUpdateCustomerPage(@PathVariable String name,
            HttpServletRequest request, ModelMap model) {

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Query query = new Query("Customer");
        query.addFilter("name", FilterOperator.EQUAL, name);
        PreparedQuery pq = datastore.prepare(query);

        Entity e = pq.asSingleEntity();
        model.addAttribute("customer",  e);

        return "update";

    }

    @RequestMapping(value="/update", method = RequestMethod.POST)
    public ModelAndView update(HttpServletRequest request, ModelMap model) {

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String originalName =  request.getParameter("originalName");

        Query query = new Query("Customer");
        query.addFilter("name", FilterOperator.EQUAL, originalName);
        PreparedQuery pq = datastore.prepare(query);
        Entity customer = pq.asSingleEntity();

        customer.setProperty("name", name);
        customer.setProperty("email", email);
        customer.setProperty("date", new Date());

                datastore.put(customer);

               //return to list
               return new ModelAndView("redirect:list");

    }

    @RequestMapping(value="/delete/{name}", method = RequestMethod.GET)
    public ModelAndView delete(@PathVariable String name,
            HttpServletRequest request, ModelMap model) {

                DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

                Query query = new Query("Customer");
        query.addFilter("name", FilterOperator.EQUAL, name);
        PreparedQuery pq = datastore.prepare(query);
        Entity customer = pq.asSingleEntity();

                datastore.delete(customer.getKey());

                //return to list
                return new ModelAndView("redirect:../list");

    }

    //get all customers
    @RequestMapping(value="/list", method = RequestMethod.GET)
    public String listCustomer(ModelMap model) {

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Query query =
                      new Query("Customer").addSort("date", Query.SortDirection.DESCENDING);
            List customers =
                      datastore.prepare(query).asList(FetchOptions.Builder.withLimit(10));

            model.addAttribute("customerList",  customers);

        return "list";

    }

}

2. Pages JSP

3 pages JSP pour afficher le client et effectuer l'ajout et la mise à jour.

Fichier: list.jsp

<%@ page import="java.util.List" %>
<%@ page import="com.google.appengine.api.datastore.Entity" %>


    

GAE + Spring 3 MVC REST + CRUD Example

Function : Add Customer

All Customers

<% List customers = (List)request.getAttribute("customerList"); for(Entity e : customers){ %> <% } %>
Name Email Created Date Action
<%=e.getProperty("name") %> <%=e.getProperty("email") %> <%=e.getProperty("date") %> ">Update | ">Delete

Fichier: add.jsp



    

Add Customer

UserName :
Email :

Fichier: update.jsp

<%@ page import="com.google.appengine.api.datastore.Entity" %>


    

Update Customer

<% Entity customer = (Entity)request.getAttribute("customer"); %>
" />
UserName : " />
Email : " />

3. Configuration du ressort

Analysez le contrôleur Spring et configurez le résolveur de vue, afin qu'il puisse rediriger la vue vers des pages jsp.

Fichier: mvc-dispatcher-servlet.xml



    
    

    
        
            /pages/
        
        
            .jsp
        
    

4. Intégrer le ressort

Intégrez Spring dans l'application Web.

Fichier: web.xml



    
        mvc-dispatcher
        
                      org.springframework.web.servlet.DispatcherServlet
                
        1
    

    
        mvc-dispatcher
        /
    

    
        contextConfigLocation
        /WEB-INF/mvc-dispatcher-servlet.xml
    

    
        
                   org.springframework.web.context.ContextLoaderListener
                
    

    
        index.html
    

5. Demo

Terminé, voir la démo et vous montrer le flux de travail de l'application Web.

1. Une page de liste, pour afficher la liste des clients existants.

gae spring mvc crud example - list

2. Dans la page de liste, cliquez sur le lien «Ajouter un client» pour afficher la page d'ajout de client, remplissez un nouveau client et cliquez sur le bouton «Ajouter».

gae spring mvc crud example - add

3. Après avoir enregistré le client, il reviendra à la page de liste.

gae spring mvc crud example - list

4. Essayez le lien de mise à jour, il affichera les données du client sélectionné, mettra à jour l'adresse e-mail et cliquez sur le bouton de mise à jour.

gae spring mvc crud example - update

5. L'e-mail est mis à jour et redirige vers la page de liste.

gae spring mvc crud example - list

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.