为了账号安全,请及时绑定邮箱和手机立即绑定

Spring data jpa 自定义存储库可分页

Spring data jpa 自定义存储库可分页

三国纷争 2023-07-13 14:13:57
我创建了自定义存储库和其中的一种方法。我想将可分页对象添加到该查询中,以限制返回的项目。我创建了额外的方法,该方法将从所有项目中仅提取选定的页面。但问题是,如果我有 50000 个项目,我需要获取所有项目,然后仅从中获取选定的页面,这对性能非常不利。public List<Team> findTeamsForUser(long userId, long statusId, TeamCriteria criteria, Pageable pageable) {    StringBuilder sb = new StringBuilder("select team from Team team join TeamMember teamMember on teamMember.team.id=team.id where             teamMember.user.id=" + userId + " AND teamMember.status.id=" + statusId);    if(criteria!=null) {        if (criteria.getGameId() != null) {            sb.append(" AND team.game.id IN " + criteria.getGameId().getIn().toString().replace("[", "(").replace("]", ")"));        }    }    sb.append(" ORDER BY team.createdDate DESC");    Query query = entityManager.createQuery(sb.toString());    return query.getResultList();}我想以某种方式在该查询中包含可分页参数,这样我只能得到有限的项目。
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

您可以使用setMaxResults()和 setFirstResult()来Query限制记录数和第一条返回记录的偏移量。


setMaxResults()相当于SQL 中的LIMITwhere 。setFirstResult()OFFSET


结合spring数据,代码如下Query: Pageable


Query query = entityManager.createQuery(sql.toString());

query.setMaxResults(pageable.getPageSize());

query.setFirstResult(pageable.getOffset());

假设每次要返回10条记录。Pageable每页的为


Pageable page1 = PageRequest.of(0, 10);  //Page 1 , offset=0  , limit=10

Pageable page2 = PageRequest.of(10, 10);  //Page 2 , offset=10 , limit=10

Pageable page3 = PageRequest.of(20, 10);  //Page 3 , offset=20 , limit=10

....

......

Pageable pageN = PageRequest.of((n-1)*10, 10);  //Page N , offset=(N-1)*10 , limit=10


查看完整回答
反对 回复 2023-07-13
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信