Рубрики
Без рубрики

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

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

Автор оригинала: mkyong.

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

Добавь

Храните клиента в хранилище данных, используя “имя” в качестве ключа.

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

Обновление

Чтобы обновить, просто измените существующую сущность и сохраните ее снова.

	
	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

1. Пружинный контроллер

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

Файл: CustomerController.java

package com.mkyong.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. Демонстрация

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

1. Страница со списком, на которой отображается список существующих клиентов.

URL: http://localhost:8888/клиент/список

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

URL: http://localhost:8888/customer/addCustomerPage

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

URL: http://localhost:8888/клиент/список

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

URL: http://localhost:8888/customer/update/mkyong

5. Электронное письмо обновляется и перенаправляется обратно на страницу со списком.

URL: http://localhost:8888/клиент/список

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

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

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

Рекомендации

  1. GAE: Использование хранилища данных
  2. ГАЕ: Сущности
  3. GAE: низкоуровневый api хранилища данных
  4. GAE: Операции CRUD с JDO и Spring MVC
  5. Опыт использования Google App Engine, Spring MVC и Flex

Оригинал: “https://mkyong.com/google-app-engine/google-app-engine-spring-mvc-crud-example-with-datastore-low-level-api/”