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 bysort byなどを処理できます。これらはすべて、このタイプのドメイン固有言語を使用してクエリを構築します。

DSLQuery または DynamicQuery

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

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