QueryByExampleExecutor<T>
Spring data JPA中这个接口的方法有哪些用例。我用谷歌搜索并发现除了官方文档之外什么都没有。
也许有人可以通过示例向我指出正确的资源。
特别是findAll(Example<S> example, Pagable pageable)
,该界面是一种更简单的搜索、分页和排序方式吗?
QueryByExampleExecutor<T>
Spring data JPA中这个接口的方法有哪些用例。我用谷歌搜索并发现除了官方文档之外什么都没有。
也许有人可以通过示例向我指出正确的资源。
特别是findAll(Example<S> example, Pagable pageable)
,该界面是一种更简单的搜索、分页和排序方式吗?
Spring Data JPA 示例查询技术使用Example
s 和ExampleMatcher
s 将实体实例转换为底层查询。当前的官方文档有几个有用的例子。这是我受文档启发的示例:
人.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);
}
来自 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。