Google App Engine + Spring MVC, CRUD-Beispiel mit niedriger Ebene für Datenspeicher

Google App Engine + Spring MVC, CRUD-Beispiel mit Datastore Low Level API

GAE datastore
Informationen zum GAE-Datenspeicher finden Sie in diesem offiziellen Abschnitt unter „https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore[Uating datstore guide]“.

Weitere Informationen zum Ausführen von CRUD für den Google App Engine-Datenspeicher Java mithilfe der API auf niedriger Ebene finden Sie in den folgenden Codefragmenten.

Add

Speichern Sie einen Kunden im Datenspeicher mit dem Schlüssel "Name".

    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

Geben Sie 10 Kunden als Liste zurück.

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

Finden Sie einen Kunden mit passendem Filter und geben Sie ihn zurück.

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

FilterOperator.EQUAL
Spielen Sie diese Filter ab, es gibt nur wenige Bedingungsoptionen, wie z. B. kleiner als, großartig als und usw.

Aktualisieren

Zum Aktualisieren ändern Sie einfach die vorhandene Entität und speichern Sie sie erneut.

    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

Löschen

Zum Löschen benötigen Sie den Entitätsschlüssel.

    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

GAE + Spring MVC + CRUD Beispiel

Ok, jetzt zeigen wir Ihnen eine einfache Webanwendung, die mit Spring MVC im REST-Stil entwickelt wurde. Bearbeiten Sie Daten im Google App Engine-Datenspeicher mithilfe der oben genannten APIs auf niedriger Ebene.

  1. Java SDK für Google App Engine 1.6.3.1

  2. Frühling 3.1.1

  3. JDK 1.6

  4. Eclipse 3.7 + Google Plugin für Eclipse

Note
Dieses Beispiel ist so einfach wie möglich gehalten, um Ihnen zu zeigen, wie Sie nur CRUD ausführen, keine Ebenen wie DAO oder BO, keine Validierung oder Benachrichtigung über den Erfolg oder die fehlgeschlagene Aktion.

1. Federkontroller

Federkontroller im REST-Stil zum Anzeigen der Webseite und Ausführen des CRUD. Der Code sollte selbsterklärend sein.

Datei: 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. JSP-Seiten

3 JSP-Seiten zum Anzeigen des Kunden und zum Hinzufügen und Aktualisieren.

Datei: 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

Datei: add.jsp



    

Add Customer

UserName :
Email :

Datei: update.jsp

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


    

Update Customer

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

3. Federkonfiguration

Scannen Sie den Spring-Controller und konfigurieren Sie den View Resolver, damit er die Ansicht auf JSP-Seiten umleiten kann.

Datei: mvc-dispatcher-servlet.xml



    
    

    
        
            /pages/
        
        
            .jsp
        
    

4. Feder integrieren

Integrieren Sie Spring in die Webanwendung.

Datei: 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

Fertig, sehen Sie sich die Demo an und zeigen Sie den Workflow der Webanwendung.

1. Eine Listenseite, um die Liste der vorhandenen Kunden anzuzeigen.

gae spring mvc crud example - list

2. Klicken Sie auf der Listenseite auf den Link "Kunde hinzufügen", um die Seite "Kunde hinzufügen" anzuzeigen, geben Sie einen neuen Kunden ein und klicken Sie auf die Schaltfläche "Hinzufügen".

gae spring mvc crud example - add

3. Nachdem der Kunde gespeichert wurde, kehrt er zur Listenseite zurück.

gae spring mvc crud example - list

4. Versuchen Sie, den Link zu aktualisieren. Er zeigt die Daten des ausgewählten Kunden an, aktualisiert die E-Mail-Adresse und klickt auf die Schaltfläche "Aktualisieren".

gae spring mvc crud example - update

5. Die E-Mail wird aktualisiert und zur Listenseite zurückgeleitet.

gae spring mvc crud example - list

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.