ドメイン固有言語クエリの使用
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に変更します。
次に、次の手順に従って例をデプロイします。
-
liferay-g4e1.zipサンプル プロジェクトをダウンロードして解凍します。curl https://resources.learn.liferay.com/examples/liferay-g4e1.zip -Ounzip liferay-g4e1.zip -
プロジェクトモジュールをビルドしてデプロイします。
cd liferay-g4e1./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
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] -
サンプル モジュールが動作していることを確認するには、ブラウザーを開いて
https://localhost:8080にアクセスします。 -
g4e1 ポートレットをページに追加します。 サンプル ポートレットはウィジェットのサンプルの下にあります。

-
名前と説明を入力してエントリを追加します。 非表示 のチェックを外のままにします。 追加をクリックすると、新しいエントリが G4E1 エントリの下に表示されます。
-
別の名前と説明を持つ別のエントリを追加します。 今回は、 非表示をチェックします。 新しいエントリが G4E1 エントリの下に表示されません。
この例では、DSL クエリを使用して、データベース内の指定された値を持つエントリのみを取得します (hidden_ = false)。
DSLQueryを使用したクエリの構築
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);
}
-
DSLQueryFactoryUtilの静的メソッドを使用して DSL クエリを作成できます。 この例では、select()メソッドを使用して、テーブル内の選択された行からすべてのデータを取得する単純なSELECTステートメントを作成します。注DSLQueryFactoryUtilには、より複雑な SQL 操作のためのselectDistinct()、count()、countDistinct()などの他のメソッドも含まれています。 -
from()メソッドを使用してクエリするテーブルを選択します。 これは、Tableオブジェクトの形式で単一の引数を取ります。 -
そこから、ほとんどの SQL 操作に Java メソッドを使用して、カスタム クエリの構築を続行できます。 可能なすべての操作のリストについては、
JoinStepjavadocs を参照してください。 この例では、WHERE句を使用して、隠しの値が指定されたブール変数と等しいかどうかを確認します。注DSL クエリは、ユニオン、ジョイン、エイリアス、関数、複雑な where 句、
group byやsort byなどを処理できます。これらはすべて、このタイプのドメイン固有言語を使用してクエリを構築します。
DSLQuery または DynamicQuery
ポータルのサービスと独自のカスタム サービス内のすべての Service Builder コードには DSL クエリのサポートが組み込まれているため、エンティティをコア エンティティのように処理できます。 DSL クエリは Java クラスとインターフェースで実装されているため、クエリは実行時ではなくコンパイル時に検証され、動的クエリよりもエラーが発生しにくくなります。
Liferay の最新バージョンでは、DSL クエリは、すべての Service Builder エンティティのカスタム クエリを処理するための最適な方法です。 同等の動的クエリ/カスタム SQL 実装よりも直感的で効率的であり、エラーが発生しにくくなります。