2016-10-03 183 views

回答

2

從春天文檔爲Example

支持通過實例(QBE)查詢。一個示例使用探針來定義示例。匹配選項和類型安全可以使用ExampleMatcher進行調整。

所以這個類和QueryByExampleExecutor接口包括Spring Data的實現這個實例查詢範式的一部分。

從維基百科職位上Query by Example

查詢通過示例(QBE)是關係數據庫的數據庫查詢語言。它是在20世紀70年代中期由IBM Research的MoshéM. Zloof設計的,與SQL的開發並行。它是第一個圖形化查詢語言,使用可視表格,用戶可以輸入命令,示例元素和條件。

最後,您引用#findAll方法的文檔指出以下:

<S extends T> Page<S> findAll(Example<S> example, Pageable pageable)
返回符合指定Example實體的Page。如果找不到匹配,則返回空的Page

因此,基本上QBE代表了一種使用更自然的,基於模板的查詢語法來查詢關係數據庫的方式,而不是使用SQL,而Spring Data有一個支持它的API。

+0

所以可以肯定地說'在'的findAll example'參數(例這裏是我的例如通過文檔的啓發示例,Pageable pageable' _can_提供某種_filtering_。我仍然沒有看到這個教程或示例,+1的維基百科鏈接雖然 – wiseOne

+0

@wiseOne Yep ,這是一種過濾方式。維基百科鏈接有一個數據庫示例,但是如果您單擊查詢示例的StackOverflow標籤,也有一些Spring示例。 – nbrooks

1

Spring Data JPA查詢示例技術使用Example s和ExampleMatcher將實體實例轉換爲基礎查詢。 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); 
} 
相關問題