Spring Data JPA 数据分页与排序

分页

Pageable 是Spring定义的接口,用于分页参数的传递,我们看看如何使用它。首先将ArticleRepository注入到你需要进行持久层操作的类里面,通常是一个@Service注解的类,然后在服务方法内使用如下代码进行分页操作:查询第一页(从0开始)的数据,每页10条数据。

  1. public interface ArticleRepository extends PagingAndSortingRepository<Article,Long> {
  2. //查询article表的所有数据,传入Pageable分页参数,不需要自己写SQL
  3. Page<Article> findAll(Pageable pageable);
  4. //根据author字段查询article表数据,传入Pageable分页参数,不需要自己写SQL
  5. Page<Article> findByAuthor(String author, Pageable pageable);
  6. //根据author字段和title字段,查询article表数据,传入Pageable分页参数,不需要自己写SQL
  7. Slice<Article> findByAuthorAndTitle(String author, String title, Pageable pageable);
  8. }
  9. Pageable pageable = PageRequest.of(0, 10); //第一页
  10. //Pageable pageable = PageRequest.of(0, 10); //第二页
  11. //Pageable pageable = PageRequest.of(0, 10); // 第三页
  12. //数据库操作获取查询结果
  13. Page<Article> articlePage = articleRepository.findAll(pageable);
  14. //将查询结果转换为List
  15. List<Article> articleList = articlePage.getContent();

findAll方法以Page类的对象作为响应,如果我们想获取查询结果List,可以使用getContent()方法。但是笔者不建议这样进行转换,因为前端展示一个分页列表,不仅需要数据,而且还需要一些分页信息。如:当前第几页,每页多少条,总共多少页,总共多少条。这些信息在Page(articlePage)对象里面均可以获取到(下文中有介绍)。

排序

Spring Data JPA提供了一个 Sort对象,用以提供一种排序机制。让我们看一下排序的方式。

  1. articleRepository.findAll(Sort.by("createTime"));
  2. articleRepository.findAll(Sort.by("author").ascending()
  3. .and(Sort.by("createTime").descending()));

第一个findAll方法是按照createTime的升序进行排序
第一个findAll方法是按照author的升序排序,再按照createTime的降序进行排序

分页+排序

  1. Pageable pageable = PageRequest.of(0, 10,Sort.by("createTime"));

发表评论

表情:
评论列表 (有 0 条评论,27人围观)

还没有评论,来说两句吧...

相关阅读