spring-data-jpa Query by Example 动态条件查询
Example可以简化很多代码,但是功能有点弱,主要是对字符串匹配支持的比较好,对于非字符串的属性,只支持精确匹配,Example不支持范围查询(大于、小于、between等操作),这个就大大降低了Example的实用性。
StringMatcher options
Matching | Logical result |
---|---|
DEFAULT (case-sensitive) | firstname = ?0 |
DEFAULT (case-insensitive) | LOWER(firstname) = LOWER(?0) |
EXACT (case-sensitive) | firstname = ?0 |
EXACT (case-insensitive) | LOWER(firstname) = LOWER(?0) |
STARTING (case-sensitive) | firstname like ?0 + ‘%’ |
STARTING (case-insensitive) | LOWER(firstname) like LOWER(?0) + ‘%’ |
ENDING (case-sensitive) | firstname like ‘%’ + ?0 |
ENDING (case-insensitive) | LOWER(firstname) like ‘%’ + LOWER(?0) |
CONTAINING (case-sensitive) | firstname like ‘%’ + ?0 + ‘%’ |
CONTAINING (case-insensitive) | LOWER(firstname) like ‘%’ + LOWER(?0) + ‘%’ |
示例代码
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("title", startsWith())
.withMatcher("content", contains());
List<MailMessage> list = repository.findAll(Example.of(example,matcher), Sort.by("id").descending());