我使用PagingAndSortingRepository和findAll(Pageable pageable)方法来分页我的数据。我认为没有办法提供任何条件。例如,有时我想选择和分页地址city = NY。有没有办法同时提供条件和分页?
我使用PagingAndSortingRepository和findAll(Pageable pageable)方法来分页我的数据。我认为没有办法提供任何条件。例如,有时我想选择和分页地址city = NY。有没有办法同时提供条件和分页?
该 PagingAndSortingRepository
只是在分页模式中添加了非常基本的CRUD方法。作为 参考文件 介绍,你可以简单地添加一个 Pageable
您定义的任何查询方法的参数,以实现此查询的分页。
interface CustomerRepository implements Repository<Customer, Long> {
Page<Customer> findByLastname(String lastname, Pageable pageable);
List<Customer> findByFirstname(String firstname, Pageable pageable);
}
第一种方法将返回一个 Page
包含页面元数据,如可用的总元素等。要计算此数据,它将触发派生查询的附加计数查询。第二个查询方法返回纯切片结果集,而不执行计数查询。
该 PagingAndSortingRepository
只是在分页模式中添加了非常基本的CRUD方法。作为 参考文件 介绍,你可以简单地添加一个 Pageable
您定义的任何查询方法的参数,以实现此查询的分页。
interface CustomerRepository implements Repository<Customer, Long> {
Page<Customer> findByLastname(String lastname, Pageable pageable);
List<Customer> findByFirstname(String firstname, Pageable pageable);
}
第一种方法将返回一个 Page
包含页面元数据,如可用的总元素等。要计算此数据,它将触发派生查询的附加计数查询。第二个查询方法返回纯切片结果集,而不执行计数查询。
对于分页,您需要2个方法,如getCount(可分页可分页)和findAll(可分页可分页)
然而,在Hibernate中使用这个功能是微不足道的。如果您有任何HQL查询,您可以简单地执行此操作:
public Long getCount(Pageable pageable) {
Query q = session.createQuery("Select count(t) From TableClass t where t.city = 'NY'");
Long cnt = (Long) q.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Query q = session.createQuery("From TableClass t where t.city = 'NY'");
q.setFirstResult(start);
q.setMaxResults(length);
List<TableClass> tableClasslist = q.list();
return tableClasslist;
}
同样,如果你有一个Criteria查询,它实际上是一样的:
public Long getCount(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setProjection(Projections.rowCount());
Long cnt = (Long) c.uniqueResult();
return cnt;
}
public List<TableClass> findAll(Pageable pageable) {
Criteria c = session.createCriteria(TableClass.class);
c.setParameter("city","NY");
c.setFirstResult(start);
c.setMaxResults(length);
List<TableClass> tableClasslist = c.list();
return tableClasslist ;
}