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 { Listresults = (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 { Listresults = (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"); Listresults = 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 для хранения данных в хранилище данных.
-
Google App Engine Java SDK 1.6.3.1, JDO 2.3
-
Весна 3.1.1
-
JDK 1.6
-
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 { Listresults = (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
Name | Created Date | Action | |
<%=c.getName() %> | <%=c.getEmail() %> | <%=c.getDate() %> | Update | Delete |
Файл: add.jsp
Add Customer
Файл: 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"); } %>
5. Demo
Готово, см. Демонстрацию, чтобы показать вам рабочий процесс веб-приложения.
1. Страница листинга, чтобы отобразить список существующих клиентов.
2. На странице со списком нажмите ссылку «Добавить клиента», чтобы отобразить страницу добавления клиента, введите нового клиента, name = «example», email = «[email protected]» и нажмите «Добавить» Кнопка.
3. Сохраненный клиент, он вернется обратно на страницу листинга.
4. Попробуйте обновить ссылку, она отобразит данные выбранного клиента, обновит электронную почту до «[email protected]» и нажмите кнопку обновления.
5. Адрес электронной почты обновляется и перенаправляется обратно на страницу со списком.
6. Чтобы удалить клиента, просто нажмите на ссылку «удалить».
Скачать исходный код
Из-за большого размера файла все файлы Spring MVC и GAE исключены.
Скачать -GAE-SpringMVC-JDO-example.zip (22 КБ)