我想使用Spring Boot 1.5执行针对过滤器列表的查询,我需要参数(用户名)和可选参数(电子邮件),如何在查询中为参数分配可选参数? @Query(“从用户u那里选择u.username,例如:username AND u.email =:email来选择u”) public Page getUsers(@Param(“ username”)字符串用户名,@Param(“ email”)字符串email); http://localhost:8080/users?username=&email=test:工作正常 http://localhost:8080/users?username=:例外
答案 0 :(得分:1)
像这样使用JPA标准API:
首先,创建一个Specification
对象:
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)
);
}
从JpaSpecificationExecutor
扩展您的存储库:
public interface ItemRepository extends CrudRepository<Item, Long>, JpaSpecificationExecutor<Item> {
}
使用规范选择所有项目:
List<Item> items = itemRepository.findAll(createSpecification(itemSearch))