libro
www.tuyano.com
Slim3によるGAE/J開発入門

モデル(エンティティ)の作成 (4/5)

作成:2013-12-14 10:42
更新:2013-12-14 10:42

■データの追加と一覧表示

では、このMyDataのインスタンスを作ってデータストアに保存し、それを表示する、というデータベース利用の基本部分を作ってみましょう。

今回は、既に作ってあるindexアクション(IndexControllerクラスとindex.jsp)をそのまま再利用することにします。考え方としては、indexアクションのページに、データを追加するためのフォームとデータの一覧を表示したテーブルを用意することにします。フォームをindexにPOST送信したらそれがデータストアに追加されます。とりあえず1つのアクションで追加と表示が作れますね。

まずはコントローラーから作りましょう。IndexControllerクラスを下のリスト欄のように書き換えてください。これでソースコードは完成です。


●エンティティの保存
エンティティのデータストアへの保存は、 if (isPost()){……}の条件分岐で行っています。isPostでPOSTされたかどうかチェックし、された場合は、送信されたフォームの値を取得して、それを元にMyDataインスタンスを作り、データストアに保存します。
String myname = asString("myname");
String mail = asString("mail");
int age = asInteger("age");
フォームから送られた値を取得します。まだindex.jspは作ってませんが、myname, mail, ageと、エンティティクラスのプロパティと同じ名前でフォームのフィールド類が用意されている、という前提でコードを書いておきましょう。

フォーム送信の処理については、前回やりましたね? asStringasIntegerメソッドで、送られてきたフォームの値を取り出すことができました。
MyData mydata = new MyData();
mydata.setMyname(myname);
mydata.setMail(mail);
mydata.setAge(age);
取得した変数を元に、MyDataインスタンスを作ります。これは単純ですね。newしてSetterメソッドを呼び出していくだけです。これで保存するエンティティのインスタンスは用意できました。
Datastore.put(mydata);
これが、エンティティを保存する処理です。Datastoreクラスのputというメソッドを呼び出すだけ! このDatastoreクラスは、GAEの標準ライブラリではなく、Slim3に用意されているクラスです(GAEのデータストアクラスはDataStore、「S」が大文字です)。


●エンティティ一覧の取得
List<MyData> mydatas = Datastore.query(MyDataMeta.get()).asList();
残る「エンティティの取得」についてです。これは、上の1文だけで行っています。Datastoreクラスの「query」というメソッドを呼び出し、その返値の「asList」を呼び出していますね。

queryは、引数の情報を元にエンティティを取得するためのクエリーオブジェクト(Slim3に用意されているModelQueryというクラスのインスタンスです)を生成します。queryでは、取得するエンティティクラスのclassか、そのメタクラスを引数に指定します。

ここでは引数にMyDataMetaクラスの「get」を指定していますね。これはMyDataMetaインスタンスを返すメソッドです。MyDataMetaクラスはシングルトン(常に1つのインスタンスしかない)なので、newせず、専用メソッドでインスタンスを取得します。

後は、ModelQueryから実際のモデルを取り出すだけです。「asList」は、検索されたエンティティをListにまとめて返すものです。多数のオブジェクトが得られる場合は、基本的にすべてasListでオブジェクトを取得する、と考えてください。

これで、保存されているMyDataがすべてListにまとめて取り出せました。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro.myslim3app.controller;

import java.util.List;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.datastore.Datastore;

import com.tuyano.libro.myslim3app.meta.MyDataMeta;
import com.tuyano.libro.myslim3app.model.MyData;

public class IndexController extends Controller {

    @Override
    public Navigation run() throws Exception {
        String msg = "データの入力";
        if (isPost()){
            String myname = asString("myname");
            String mail = asString("mail");
            int age = asInteger("age");
            MyData mydata = new MyData();
            mydata.setMyname(myname);
            mydata.setMail(mail);
            mydata.setAge(age);
            Datastore.put(mydata);
        }
        List<MyData> mydatas = Datastore.query(MyDataMeta.get()).asList();
        request.setAttribute("msg", msg);
        request.setAttribute("mydatas", mydatas);
        return forward("index.jsp");
    }
}
※関連コンテンツ

「Slim3によるGAE/J開発入門」に戻る