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

データストアの検索 (1/5)

作成:2013-12-21 11:20
更新:2013-12-21 11:20

■queryとfilter

今回は、データの検索についてひと通り説明していくことにしましょう。

前回、簡単なサンプルを作成したところで「全データを取り出して表示する」ということを行っていました。これはごく単純なものですが、しかし「データ検索」の基本ともいえることを行っていたのです。これは、以下のようにしてデータを取得していました。
Datastore.query(メタクラス).asList();

query」というのは、データベースからモデルのインスタンスを検索するためのクエリを管理する「ModelQuery」クラスのインスタンスを返すメソッドです。これは引数に指定したメタクラスを元に、指定のモデルクラスを検索するクエリを生成します。

そして「asList」は、クエリによる検索結果をListとして取り出すためのメソッドで、返値はエンティティのインスタンスをまとめたListインスタンスとなります。つまりqueryメソッドにより、特定のモデルクラスのデータが検索されるクエリが作られ、asListによりそれを元に検索が実行されてListが返される、というわけですね。


■filterメソッドについて

これで「指定のモデルクラス全部を得る」という基本はできました。後は、そこから「指定した条件のものだけを絞り込む」という設定を追加するだけなのです。これは「フィルター」と呼ばれ、ModelQueryクラス(queryメソッドで返されるクラス)の「filter」メソッドを使って設定されます。
Datastore.query(メタクラス).filter( フィルターの設定 ).asList();

filterは、引数にフィルターの設定情報を用意します。これは、「FilterCriterion」というインターフェイスを使います。このインスタンスをいかに取得するか?が、フィルターのキモといっていいでしょう。


■asSingleについて

この他にもう1つ、覚えておきたいメソッドがあります。それは「asSingle」です。これは、asListと対を成すものです。

asListは結果をすべてまとめてListにして返すものですが、asSingleは1つのオブジェクトだけを結果として返します。つまり、複数個を返さないメソッドなのです。これは、例えばIDを使った検索などのように「1つだけしかエンティティはない」というようなときに使います。

もし、asSingleしたときに複数個のエンティティが見つかっていた場合には例外が発生しますので、「複数個のエンティティがあってその内の1つを選ぶ」というようなときには使わないほうがよいでしょう。あくまで「1つだけしかエンティティがない」ことが保証されるようなケースで使うもの、と考えたほうが良さそうですね。

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

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

※関連コンテンツ

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