Google App Engine JDO Spring MVC、CRUDの例

Google App Engine + JDO + Spring MVC、CRUDの例

Note
このチュートリアルは練習ガイドの詳細です。詳細な説明については、このofficial Using JDO in datastoreを参照してください。

Java Data Objects(JDO)を使用してGAEデータストアでCRUDを実行するには、次のコードスニペットを参照してください。 顧客にJDO annotationで注釈を付け、PersistenceManagerを介してCRUDを実行するだけです。

Add

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

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

name ==“ example”である“ Customer”を検索します。

    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("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 {
        List results = (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");
    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の例

それでは、JSPを使用してデータストアにデータを保存する、RESTスタイルのSpring MVCを使用して開発された簡単なWebアプリケーションを紹介します。

  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 + Eclipse用Googleプラグイン

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. スプリングコントローラー

RESTスタイルのSpringコントローラーは、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 {
            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.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

<% 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.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"); } %>
UserName :
Email :

5. Demo

完了しました。Webアプリケーションのワークフローを示すデモをご覧ください。

1. 既存の顧客のリストを表示するリストページ。

gar jdo example

2. リストページで、「顧客の追加」リンクをクリックして顧客の追加ページを表示し、新しい顧客を入力します。名前=「example」、電子メール=「[email protected]」、「追加」をクリックします。 」ボタン。

gar jdo example

3. 顧客を保存すると、リストページに戻ります。

gar jdo example

4. リンクを更新してみてください。選択した顧客のデータが表示され、メールが「[email protected]」に更新され、更新ボタンをクリックします。

gar jdo example

5. メールが更新され、リストページにリダイレクトされます。

gar jdo example

6. 顧客を削除するには、「削除」リンクをクリックするだけです。

ソースコードをダウンロード

ファイルサイズが大きいため、すべてのSpring MVCおよびGAE jarは除外されます。

ダウンロード–GAE-SpringMVC-JDO-example.zip(22 KB)