我有以下JPA存储库:
public interface PostRepository extends JpaRepository<Post, String> {
List<Post> findAll();
List<Post> findByExample(Example<Post> example);
}
我需要修改findByExample以获取示例,但在单个字段上使用通配符。所以在这种情况下,字段&#34;标题&#34;需要等同于SQL&#39;喜欢&#39;或者&#39;包含&#39;。
Spring文档显示了这一点:
Person person = new Person();
person.setFirstname("Dave");
ExampleMatcher matcher = ExampleMatcher.matching()
.withIgnorePaths("lastname")
.withIncludeNullValues()
.withStringMatcherEnding();
Example<Person> example = Example.of(person, matcher);
来自https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods
但我不确定如何自定义我的界面(假设使用默认方法)来使用它。
或者是否有一个方法的特定名称,spring将使用此功能自动配置,例如
List<Post> findByExampleTitleLike(Example<Post> example);
TIA
答案 0 :(得分:1)
我这样做:
Person person = ...
PageRequest page = ...
ExampleMatcher matcher = ExampleMatcher.matching().withMatcher(
"lastname",
ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.CONTAINING).ignoreCase()
);
return personRepository.findByExample(Example.of(person, matcher), page).getContent();
SQL'like'或'contains'由StringMatcher.CONTAINING
完成。另外,我添加ignoreCase()来区分大小写。
如果有人知道更短的语法,我很乐意看到:)
答案 1 :(得分:0)
替代语法(简称)。
服务方法:
{
"dll": {
"_id": "5bde21f068a6d80712e67fab",
"name": null,
"dllFile": "uploads\\1541541269220msdia80.dll"
}
}
存储库:
public Page<PersonDto> listPersons(Person probe, Pageable pageable) {
ExampleMatcher matcher = ExampleMatcher.matching()
.withIgnoreCase()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
final Example<Person> example = Example.of(probe, matcher);
return personRepository.findAll(example, pageable)
.map(PersonMapper::convertToDto);
}