Java 带有查询Spring Boot jpa 1.5的可选参数
我想用spring boot 1.5执行过滤器列表查询,我有必需的参数(用户名)和可选的参数(电子邮件),如何在查询中为参数分配可选的? @查询(“从用户u中选择u,其中u.username如:username和u.email=:email”) 公共页面getUsers(@Param(“用户名”)字符串username,@Param(“电子邮件”)字符串email); :干得好Java 带有查询Spring Boot jpa 1.5的可选参数,java,hibernate,spring-boot,jpa,Java,Hibernate,Spring Boot,Jpa,我想用spring boot 1.5执行过滤器列表查询,我有必需的参数(用户名)和可选的参数(电子邮件),如何在查询中为参数分配可选的? @查询(“从用户u中选择u,其中u.username如:username和u.email=:email”) 公共页面getUsers(@Param(“用户名”)字符串username,@Param(“电子邮件”)字符串email); :干得好 :Exception使用JPA标准API,如下所示: 首先,创建一个规范对象: private Specificati
:Exception使用JPA标准API,如下所示: 首先,创建一个
规范对象:
private Specification<Item> createSpecification(ItemSearch itemSearch) {
return (root, query, criteriaBuilder) -> criteriaBuilder.and(
Stream.of(
itemSearch.getUsername() == null ? null : criteriaBuilder.like(root.get("username"), itemSearch.getUsername()),
itemSearch.getEmail() == null ? null : criteriaBuilder.equal(root.get("email"), itemSearch.getEmail())
).filter(Objects::nonNull).toArray(Predicate[]::new)
);
}
使用规范选择所有项目:
List<Item> items = itemRepository.findAll(createSpecification(itemSearch))
List items=itemRepository.findAll(createSpecification(itemSearch))
创建两个方法,并根据电子邮件的状态调用其中一个或另一个方法。我确实有许多用于筛选的参数,但对于这个问题,我只需要两个参数,如何使用必需和可选参数执行查询?使用JPA criteria API动态创建查询,或QueryDSL。
List<Item> items = itemRepository.findAll(createSpecification(itemSearch))