【问题标题】:How to Add Pagination to a List Custom Query in JPA?如何将分页添加到 JPA 中的列表自定义查询?
【发布时间】:2022-01-12 18:30:15
【问题描述】:

我的存储库如下所示:

public interface HeroRepository extends JpaRepository<Hero,Long>{
     @Query(value = "SELECT h.heroname , SUM(h.killCount) AS killcount FROM Heroes AS h GROUP BY h.heroname ORDER BY h.heroname",nativeQuery = true)     
     List<IHero> findAllHeroByGroupName();
}

如何将分页添加到不使用 JPA 的默认“findAll”查询的自定义查询?

如何告诉 Spring 将其转换为 Page 或可分页对象?

findAllHeroByGroupName()

这样在我的 AppController 中我可以像这样使用它:

页面页面 = heroService.findAllHeroByGroupName(pageNum);

请注意,findAllHeroByGroupName() 返回的是 List 而不是 Page 对象。

【问题讨论】:

    标签: java spring hibernate jpa spring-data-jpa


    【解决方案1】:

    你需要使用Pageable

    存储库类中的方法如下所示:

    public interface HeroRepository extends JpaRepository<Hero,Long>{
         @Query(value = "SELECT h.heroname , SUM(h.killCount) AS killcount FROM Heroes AS h GROUP BY h.heroname ORDER BY h.heroname",nativeQuery = true)     
         List<IHero> findAllHeroByGroupName(Pageable pageable);
    }
    

    现在要使用分页获取记录,您可以使用类似:

    Pageable firstPageWithTwoElements = PageRequest.of(0, 2);
    

    第一个参数是页码,第二个参数是大小。你可以阅读更多关于PageRequest

    List<IHero> allProducts = heroRepository.findAllHeroByGroupName(firstPageWithTwoElements);
    

    findAll(Pageable pageable) 方法默认返回一个Page&lt;T&gt; 对象。

    但是,我们可以选择从任何返回分页数据的自定义方法中返回 Page&lt;T&gt;Slice&lt;T&gt;List&lt;T&gt;

    阅读更多关于如何使用原生查询here

    【讨论】:

    • 你真的知道如何创建分页吗?喜欢实际编程的吗?
    • 如果你这样做了,你就会知道 List 对象不会直接转换为分页所需的 Page 对象
    • 正如我所说,您可以返回 ListPage, Page&lt;IHero&gt; allProducts = heroRepository.findAllHeroByGroupName(firstPageWithTwoElements)
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2020-10-18
    相关资源
    最近更新 更多