2016-10-03 21 views
4

SpringデータJPAのこのインターフェイスのメソッドQueryByExampleExecutor<T>の使用例は何ですか?私はグーグルで公式のドキュメンテーション以上のものは見つけられませんでした。QueryByExampleExecutorのメソッドの使用例<T> SpringデータのインターフェイスJPA

おそらく誰かが例を挙げて私に適切なリソースを教えてくれるかもしれません。

特に、このインターフェイスのfindAll(Example<S> example, Pagable pageable)は、、ページネート、およびソートの簡単な方法ですか? Exampleのための春のドキュメントから

答えて

2

例(QBE)によって、クエリのサポート。例題は、この例を定義するためのプローブを取ります。マッチングオプションと型の安全性は、ExampleMatcherを使用して調整できます。

だから、このクラスとQueryByExampleExecutorインタフェースは、この例による問合せパラダイムの春データの実装の一部です。 Query by Example上のWikipediaの記事から

例による問合せ(QBE)は、リレーショナルデータベースのデータベース・クエリ言語です。これは、1970年代中頃のIBM ResearchのMoshéM. ZloofによってSQLの開発と並行して考案されました。ユーザーがコマンド、サンプル要素、および条件を入力するビジュアルテーブルを使用した、初めてのグラフィカルクエリ言語です。

最後に、あなたが参照する#findAll方法の説明は次の状態:

<S extends T> Page<S> findAll(Example<S> example, Pageable pageable)
が与えられたExampleに一致するエンティティのPageを返します。一致するものが見つからなかった場合は、空のPageが返されます。

本質的にQBEは、SQLを使用するのではなく、より自然なテンプレートベースのクエリ構文を使用してリレーショナルDBをクエリする方法を表し、Spring DataはそれをサポートするAPIを備えています。

+0

だから、それは 'のfindAll'でexample'パラメータを言うことは安全です(例ここに私の例では、ドキュメントに触発されます例、Pageable pageable' _can_何らかの_filtering_を提供しています。私はまだこのチュートリアルや例を見ていません.Wikipediaリンクの+1 +1 – wiseOne

+0

@wiseOne Yep 、それはフィルタリングの方法です。WikipediaリンクにはDBの例がありますが、Query-by-ExampleのStackOverflowタグをクリックするとSpringの例もいくつかあります。 – nbrooks

1

Spring Data JPA問合せによる手法では、ExampleExampleMatcherを使用して、エンティティ・インスタンスを基礎となる問合せに変換します。 current official documentationにはいくつかの有用な例があります。

Person.java

public class Person { 

    @Id 
    private String id; 
    private String firstname; 
    private String lastname; 
    private Address address; 

    // … getters and setters omitted 
} 

PersonResource.java

@RestController 
@RequestMapping("/api") 
public class PersonResource { 

@GetMapping("/persons/{name}") 
@Timed 
public ResponseEntity<List<Person>> getPersons(@ApiParam Pageable pageable, @PathVariable String name) { 
    log.debug("REST request to get Person by : {}", name); 
    Person person = new Person();       
    person.setFirstname(name); 
    Page<Person> page = personRepository.findAll(Example.of(person), pageable); 
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/persons"); 
    return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); 
} 
関連する問題