Advanced Queries
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ドメイン固有言語クエリの使用

Liferay DXP 7.4+

DSL クエリは、ドメイン固有言語クエリの頭字語です。 基盤は、実装にドメイン固有言語を使用することに基づいています。 これにより、動的クエリやカスタム SQL よりも自然なクエリの記述が可能になります。

サンプルをデプロイする

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132

http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。

次に、次の手順に従って例をデプロイします。

  1. liferay-g4e1.zip サンプル プロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-g4e1.zip -O
    
    unzip liferay-g4e1.zip
    
  2. プロジェクトモジュールをビルドしてデプロイします。

    cd liferay-g4e1
    
    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注

    このコマンドは、デプロイされたjarをDockerコンテナ上の /opt/liferay/osgi/modules にコピーするのと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.liferay.g4e1.api_1.0.0 [1461]
    STARTED com.liferay.g4e1.service_1.0.0 [1462]
    STARTED com.liferay.g4e1.web_1.0.0 [1463]
    
  4. サンプル モジュールが動作していることを確認するには、ブラウザーを開いて https://localhost:8080にアクセスします。

  5. g4e1 ポートレットをページに追加します。 サンプル ポートレットはウィジェットのサンプルの下にあります。

    G4E1 ポートレットをページに追加します。

  6. 名前と説明を入力してエントリを追加します。 非表示 のチェックを外のままにします。 追加をクリックすると、新しいエントリが G4E1 エントリの下に表示されます。

  7. 別の名前と説明を持つ別のエントリを追加します。 今回は、 非表示をチェックします。 新しいエントリが G4E1 エントリの下に表示されません。

この例では、DSL クエリを使用して、データベース内の指定された値を持つエントリのみを取得します (hidden_ = false)。

DSLQueryを使用したクエリの構築

  1. G4E1EntryLocalServiceImpl.javaを開きます。 DSL クエリのコードは、 getG4E1Entries メソッドで定義されています。
@Override
public List<G4E1Entry> getG4E1Entries(boolean hidden) {
	DSLQuery query = DSLQueryFactoryUtil.select(
	).from(
		G4E1EntryTable.INSTANCE
	).where(
		G4E1EntryTable.INSTANCE.hidden.eq(hidden)
	);

	return dslQuery(query);
}
  1. DSLQueryFactoryUtilの静的メソッドを使用して DSL クエリを作成できます。 この例では、 select() メソッドを使用して、テーブル内の選択された行からすべてのデータを取得する単純な SELECT ステートメントを作成します。

    注

    DSLQueryFactoryUtil には、より複雑な SQL 操作のための selectDistinct()、 count()、 countDistinct() などの他のメソッドも含まれています。

  2. from() メソッドを使用してクエリするテーブルを選択します。 これは、 Table オブジェクトの形式で単一の引数を取ります。

  3. そこから、ほとんどの SQL 操作に Java メソッドを使用して、カスタム クエリの構築を続行できます。 可能なすべての操作のリストについては、 JoinStep javadocs を参照してください。 この例では、 WHERE 句を使用して、 隠し の値が指定されたブール変数と等しいかどうかを確認します。

    注

    DSL クエリは、ユニオン、ジョイン、エイリアス、関数、複雑な where 句、 group byや sort byなどを処理できます。これらはすべて、このタイプのドメイン固有言語を使用してクエリを構築します。

DSLQuery または DynamicQuery

ポータルのサービスと独自のカスタム サービス内のすべての Service Builder コードには DSL クエリのサポートが組み込まれているため、エンティティをコア エンティティのように処理できます。 DSL クエリは Java クラスとインターフェースで実装されているため、クエリは実行時ではなくコンパイル時に検証され、動的クエリよりもエラーが発生しにくくなります。

Liferay の最新バージョンでは、DSL クエリは、すべての Service Builder エンティティのカスタム クエリを処理するための最適な方法です。 同等の動的クエリ/カスタム SQL 実装よりも直感的で効率的であり、エラーが発生しにくくなります。