Google App Engine + Spring MVC、データストア低レベルAPIを使用したCRUDの例

Google App Engine + Spring MVC、データストア低レベルAPIを使用したCRUDの例

GAE datastore
GAEデータストアとは何かを理解するには、この公式の「https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore [Using datstoreguide]」を参照してください。

低レベルAPIを使用して、Google App EngineデータストアJavaのCRUDを実行するには、次のコードスニペットを参照してください。

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の例

OK

  1. Google App Engine Java SDK 1.6.3.1

  2. 春3.1.1

  3. JDK 1.6

  4. Eclipse 3.7 + Eclipse用Googleプラグイン

Note
この例は、CRUDのみを実行する方法、DAOやBOのようなレイヤー、成功または失敗したアクションの検証またはメッセージ通知を実行する方法を示すために、可能な限り単純にしています。

1. スプリングコントローラー

Webページを表示してCRUDを実行するための、RESTスタイルのSpringコントローラー。 コードは一目瞭然です。

ファイル: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を統合する

SpringをWebアプリケーションに統合します。

ファイル: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

完了し、デモを見て、Webアプリケーションのワークフローを示します。

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 jarは除外されます。

ダウンロード–GoogleAppEngine-SpringMVC-datastore.zip(17 KB)