java - 如何通过分页按任何字段搜索

标签 java spring jpa spring-data-jpa spring-data

我有一个用例,我需要查找分页的客户列表,其中客户如下所示:

@Entity
public class Customer {

    @Id
    private Long id;

    private String firstName;

    private String lastName;

    private String phone;

    private String mail;
}

然后我就有了我的存储库界面

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {

Optional<Customer> findById(Long id);
...
}

我的接口(interface)扩展了 PagingAndSortingRepository 以提供可分页结果。

我还有一个输入框,用户可以在其中输入任何字符串。现在我想向他返回一页结果,其中一个字段(任何客户字段)中包含输入字符串。

我不想使用命名查询。有没有一种智能方法可以使用 PagingAndSortingRepository 存储库实现此目的,或者我是否需要使用规范接口(interface)并实现分页?

最佳答案

你不能这样做吗:

@Query("select c from Customer c where c.firstName like :filter" 
           + " or c.lastName like :filter or c.emailAddress like :filter.......")
Page<Customer> filter(@Param("filter") String filter);

您也可以使用 QueryDsl。

扩展附加接口(interface):

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long>, QueryDslPredicateExecutor<Customer>{

}

添加相关构建工具:

然后您可以调用继承的方法:

Page<Customer> findAll(Predicate predicate, Pageable pageable)

用法如下:

Page<Customer> page =repo.findAll(QCustomer.customer.firstName.like(filter)
     .or(QCustomer.customer.lastName.like(filter).or(...));

引用文献:

https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

关于java - 如何通过分页按任何字段搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827126/

相关文章:

java - 从字符堆栈构造字符串的高效简洁方法是什么

hibernate - 使用 Hibernate 3.6.3 和 JPA 2.0 创建类型化查询时出现 AbstractMethodError

javascript - JSP : How to link form select option to Java object

java - 在 Spring 中将 .jsp 映射到 Controller

hibernate - 从 JPA2.0 迁移到 JPA 2.1 时出现 "Unsupported use of GenericConnection"异常

java - 在 Play Framework 中启用 JPA 元模型自动生成

java - 不知道如何转换 Java - HTML

java - 为什么我们需要一个临时变量来从链表中删除节点?

java - 如何停止使用@Scheduled 注解启动的计划任务?

Spring AOP - 如何转换代理 bean?