Google App Engine + JDO + Spring MVC, CRUD-Beispiel

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();
    }

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 {
        List results = (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 {
        List results = (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");
    List results = 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.

  1. Java SDK 1.6.3.1, JDO 2.3 von Google App Engine

  2. Frühling 3.1.1

  3. JDK 1.6

  4. 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 {
            List results = (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

<% if(request.getAttribute("customerList")!=null){ List customers = (List)request.getAttribute("customerList"); if(!customers.isEmpty()){ for(Customer c : customers){ %> <% } } } %>
Name Email Created Date Action
<%=c.getName() %> <%=c.getEmail() %> <%=c.getDate() %> Update | Delete

Datei: add.jsp



    

Add Customer

UserName :
Email :

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"); } %>
UserName :
Email :

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.

gar jdo example

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.

gar jdo example

3. Der Kunde wurde gespeichert und kehrt zur Listenseite zurück.

gar jdo example

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.

gar jdo example

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

gar jdo example

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)