亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號