2016-12-14 9 views
1

SpringでJPAクエリを書くには3つのパラメータの少なくとも1つを使用するデータ?WHERE条件にパラメータを組み合わせたSpring JPAカスタムクエリ?

私は、これらの3つのパラメータがあります。

  1. ID(PK)
  2. 名前
  3. 姓を

クライアントは、これらの3つのパラメータの少なくとも一つを供給しなければならないと私は、ユーザーを見つけたいですこれらの空ではないパラメータによって。

このようなカスタムクエリを自分のリポジトリに作成することはできますか、またはWHERE条件のすべての可能な組み合わせに対してカスタムクエリを作成する必要がありますか?

+0

カスタム・リポジトリ・メソッドを使用し、JPA criteria APIを使用して問合せを動的に生成します。それがそれのためのものです。 –

+0

ありがとう、私はそれを見ます。 – Artegon

答えて

0

リポジトリにorg.springframework.data.querydsl.QueryDslPredicateExecutorを継承させ、継承されたfindAll(Predicate predicate)メソッドを使用して、任意のパラメータの組み合わせを使用してクエリできます。

その後、任意のクエリメソッドを記述する必要がありません。

http://docs.spring.io/spring-data/jpa/docs/1.10.5.RELEASE/reference/html/#core.extensions.querydsl

また、自動的にSpring MVCのコントローラにバインドさ述語は、ここに詳述していることができますよう:

https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling#querydsl-web-support

ここに:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.web.type-safe

あなたのコントローラーは、1つまたは2つまたは3つすべてのパラメーターを要求パラメーターとして渡して、コードをまったく書かなくても自動的に検索を処理できます。

+0

ええと、それはとても面白いようです。 – Artegon

0

実行時に動的クエリを作成する必要がある場所です。

アプリケーションコードでは、入力DTOの上記の各プロパティが空であるかどうかに基づいて述語を構築するロジックが必要です。

これを実行する1つの方法は、QueryDSLを使用することです。 QueryDSLを使用するには、関連する依存関係をpom/gradleファイルに含める必要があります。その後、リポジトリはQueryDslPredicateExecutorインターフェイスを拡張する必要があります。これは、2つの追加の汎用ファインダメソッドを提供します。心に留めておくべき

T findAll(Predicate) or Page<T> findAll(Predicate, Pageable)

ことの一つは、これを行うために必要ではないところ上記2つの方法が適切であることである、ここで参加

あなたの要件のいずれか1つのテーブルのクエリのようですので、ファインダー法のうちのどれでも十分である。

他のテーブルと結合する必要があり、JOIN(INNER JOINとLEFT OUTER JOINとCROSS JOINなど)の処理方法をきめ細かく制御する必要がある場合は、リポジトリで使用できるカスタムリポジトリを作成することを検討する必要があります延長する。 次に、独自のcustomImplを用意して、リポジトリからアクセスできるようにします。

0

返信いただきありがとうございます。私はSpringが他のフレームワークと同じように柔軟性に欠けていると読んでいます...つまり、私はいくつかのノードjs apiフレームワークを試してみました。この ?

関連する問題