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

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

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

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

Добавь

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

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

Поиск

Найдите “Клиент”, где имя.

	
	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("mkyong");
		//...
	} finally {
		q.closeAll();
		pm.close();
	}	

Найдите “Клиент”, где имя и адрес электронной почты.

	
	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("mkyong", "test@gmail.com");
		//...
	} 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 Используйте плагин Google для Eclipse для создания шаблона проекта веб-приложения, он создаст и настроит P.S Используйте плагин Google для Eclipse для создания шаблона проекта веб-приложения, он создаст и настроит для вас автоматически.

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

Аннотируйте объект клиента аннотацией JDO.

package com.mkyong.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.

package com.mkyong;

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. Пружинный Контроллер

Пружинный контроллер, стиль ОТДЫХА, выполняет операцию CRUD. Код должен быть понятен сам по себе.

Файл: CustomerController.java

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

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

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

URL-АДРЕС: http://localhost:8888/клиент/список

2. На странице объявления нажмите на ссылку “Добавить клиента”, чтобы открыть страницу добавления клиента, введите нового клиента, имя = ” mkyong “, адрес электронной почты = ” test@yahoo.com “и нажмите на кнопку “Добавить”.

URL-АДРЕС: http://localhost:8888/customer/add

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

URL-АДРЕС: http://localhost:8888/клиент/список

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

URL-АДРЕС: http://localhost:8888/customer/update/mkyong

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

URL-АДРЕС: http://localhost:8888/клиент/список

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

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

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

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

  1. Объекты данных Java (JDO)
  2. ГАЕ: Использование JDO
  3. GAE: низкоуровневый api хранилища данных
  4. GAE: Операции CRUD с JDO и Spring MVC

Оригинал: “https://mkyong.com/google-app-engine/google-app-engine-jdo-spring-mvc-crud-example/”