Google App Engine JDO Spring MVC, пример CRUD

Google App Engine + JDO + Spring MVC, пример CRUD

Note
Это руководство больше практическое, пожалуйста, обратитесь к этомуofficial Using JDO in datastore для подробного объяснения.

См. Следующие фрагменты кода для выполнения CRUD в хранилище данных GAE с использованиемJava Data Objects(JDO). Просто аннотируйте клиентаJDO annotation и выполните CRUD черезPersistenceManager.

Add

        Customer c = new Customer();
    c.setName(name);

    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        pm.makePersistent(c);
    } finally {
        pm.close();
    }

Найдите «Клиент», где name == «example».

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

Найдите «Клиент», где имя == «пример» и адрес электронной почты == «[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();
    }

Вернуться список записей клиентов.

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

Обновить

Чтобы обновить, получите существующий объект и измените его.

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

удалять

        PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        Customer c = pm.getObjectById(Customer.class, key);
        pm.deletePersistent(c);
    } finally {
        pm.close();
    }

GAE + Spring MVC + CRUD пример

Хорошо, теперь мы покажем вам простое веб-приложение, разработанное с использованием Spring MVC в стиле REST, с использованием JDO для хранения данных в хранилище данных.

  1. Google App Engine Java SDK 1.6.3.1, JDO 2.3

  2. Весна 3.1.1

  3. JDK 1.6

  4. Eclipse 3.7 + плагин Google для 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
Этот пример максимально прост, чтобы показать вам, как использовать JDO только для выполнения CRUD, без таких уровней, как DAO или BO, без проверки или уведомления сообщения об успешном или неудачном действии .

1. Покупатель

Аннотировать объект Customer с помощью аннотации 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

Создайте одноэлементный класс PersistenceManager.

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. Spring Controller

Контроллер Spring, стиль REST, выполняет операцию CRUD. Код должен быть понятен.

Файл: 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

Страницы JSP для отображения клиентов и выполнения добавления, обновления и удаления.

Файл: 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

Файл: add.jsp



    

Add Customer

UserName :
Email :

Файл: 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

Готово, см. Демонстрацию, чтобы показать вам рабочий процесс веб-приложения.

1. Страница листинга, чтобы отобразить список существующих клиентов.

gar jdo example

2. На странице со списком нажмите ссылку «Добавить клиента», чтобы отобразить страницу добавления клиента, введите нового клиента, name = «example», email = «[email protected]» и нажмите «Добавить» Кнопка.

gar jdo example

3. Сохраненный клиент, он вернется обратно на страницу листинга.

gar jdo example

4. Попробуйте обновить ссылку, она отобразит данные выбранного клиента, обновит электронную почту до «[email protected]» и нажмите кнопку обновления.

gar jdo example

5. Адрес электронной почты обновляется и перенаправляется обратно на страницу со списком.

gar jdo example

6. Чтобы удалить клиента, просто нажмите на ссылку «удалить».

Скачать исходный код

Из-за большого размера файла все файлы Spring MVC и GAE исключены.

Скачать -GAE-SpringMVC-JDO-example.zip (22 КБ)