Google App Engine JDO Spring MVC, exemple CRUD

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

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

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

  2. Printemps 3.1.1

  3. JDK 1.6

  4. 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 {
            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. 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

<% 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

Fichier: add.jsp



    

Add Customer

UserName :
Email :

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

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.

gar jdo example

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.

gar jdo example

3. Enregistré le client, il reviendra à la page de liste.

gar jdo example

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.

gar jdo example

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

gar jdo example

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)