5

QueryByExampleExecutor<T>Spring data JPA中这个接口的方法有哪些用例。我用谷歌搜索并发现除了官方文档之外什么都没有。

也许有人可以通过示例向我指出正确的资源。

特别是findAll(Example<S> example, Pagable pageable),该界面是一种更简单的搜索、分页和排序方式吗?

4

2 回答 2

5

Spring Data JPA 示例查询技术使用Examples 和ExampleMatchers 将实体实例转换为底层查询。当前的官方文档有几个有用的例子。这是我受文档启发的示例:

人.java

public class Person {

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

  // … getters and setters omitted
}

人资源.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);
}
于 2017-12-07T22:16:44.183 回答
3

来自 Spring Docs Example

支持示例查询 (QBE)。一个示例需要一个探针来定义示例。可以使用 ExampleMatcher 调整匹配选项和类型安全性。

所以这个类和QueryByExampleExecutor接口是 Spring Data 实现的Query By Example范式的一部分。

来自 Wikipedia post on Query by Example

Query by Example (QBE) 是一种用于关系数据库的数据库查询语言。它是由 IBM Research 的 Moshé M. Zloof 在 1970 年代中期与 SQL 的开发并行设计的。它是第一个图形查询语言,使用可视表格,用户可以在其中输入命令、示例元素和条件。

最后,#findAll您引用的方法的文档说明了以下内容:

<S extends T> Page<S> findAll(Example<S> example, Pageable pageable)
返回一个Page匹配给定的实体Example。如果找不到匹配项,Page则返回空值。

所以本质上,QBE 代表了一种使用更自然的、基于模板的查询语法来查询关系数据库的方法,而不是使用 SQL,并且 Spring Data 有一个支持它的 API。

于 2016-10-03T05:52:14.270 回答