Google App Engine + Spring MVC, пример CRUD с API низкого уровня для хранилища данных

Google App Engine + Spring MVC, пример CRUD с API низкого уровня для хранилища данных

GAE datastore
См. этот официальный «https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore[Использование руководства по хранилищу данных]», чтобы понять, что такое хранилище данных GAE.

См. Следующие фрагменты кода для выполнения CRUD для хранилища данных Google App Engine, Java, с использованием низкоуровневого API.

Add

Сохраните клиента в хранилище данных, указав «имя» в качестве ключа.

    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

Вернуть 10 клиентов в виде списка.

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

Найти и вернуть клиента с подходящим фильтром.

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

FilterOperator.EQUAL
Воспроизведите эти фильтры, у них есть несколько вариантов условий, таких как меньше, чем и т. д.

Обновить

Для обновления просто измените существующий объект и сохраните его снова.

    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

удалять

Чтобы удалить, нужен ключ объекта.

    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 пример

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

  1. Google App Engine Java SDK 1.6.3.1

  2. Весна 3.1.1

  3. JDK 1.6

  4. Eclipse 3.7 + плагин Google для Eclipse

Note
Этот пример максимально прост, чтобы показать вам, как выполнять только CRUD, без таких уровней, как DAO или BO, без проверки или уведомления об успешном или неудачном действии.

1. Spring Controller

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

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

3 страницы JSP для отображения клиента и выполнения добавления и обновления.

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

Файл: add.jsp



    

Add Customer

UserName :
Email :

Файл: update.jsp

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


    

Update Customer

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

3. Конфигурация пружины

Сканируйте контроллер Spring и настройте преобразователь представления, чтобы он мог перенаправить представление на страницы JSP.

Файл: mvc-dispatcher-servlet.xml



    
    

    
        
            /pages/
        
        
            .jsp
        
    

4. Интегрировать весну

Интегрируйте Spring в веб-приложение.

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

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

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

gae spring mvc crud example - list

2. На странице листинга нажмите ссылку «Добавить клиента», чтобы отобразить страницу добавления клиента, заполните нового клиента и нажмите кнопку «Добавить».

gae spring mvc crud example - add

3. После сохранения клиента он вернется на страницу со списком.

gae spring mvc crud example - list

4. Попробуйте обновить ссылку, она будет отображать данные выбранного клиента, обновить адрес электронной почты и нажать кнопку обновления.

gae spring mvc crud example - update

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

gae spring mvc crud example - list

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

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

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

Скачать -GoogleAppEngine-SpringMVC-datastore.zip (17 КБ)