JPA自定義查詢@Query分頁


關鍵字:countQuery

持久層:

@Query(value = "SELECT area_id,org_name,update_name,update_user,sum(success_count) AS success_count," +
            "sum(error_count) AS error_count,sum(all_call) AS all_call,sum(all_count) AS all_count FROM V_PHOTO_CALLBACK a " +
            "WHERE area_id=?1 AND end_time>=?2 AND end_time<=?3 GROUP BY area_id,org_name,update_name,update_user",
            countQuery = "select count(*) from (SELECT area_id,org_name,update_name,update_user,sum(success_count) AS success_count," +
                    "sum(error_count) AS error_count,sum(all_call) AS all_call,sum(all_count) AS all_count FROM tableName a " +
                    "WHERE area_id=?1 AND end_time>=?2 AND end_time<=?3 GROUP BY area_id,org_name,update_name,update_user)",
            nativeQuery = true)
    Page<PhotoCallback> query(String areaId, String beginTime, String endTime, Pageable pageable);

服務層:


@Override
public Map<String,Object> query(String areaId, String beginTime, String endTime, Pageable pageable) { Map<String,Object> map = new LinkedHashMap<>(); int pageMin = pageable.getPageNumber() * pageable.getPageSize(); int pageMax = pageMin + pageable.getPageSize(); Pageable page = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.Direction.DESC, "update_user"); Page<PhotoCallback> all = photoCallbackRepository.query(areaId, beginTime, endTime, page); map.put("content",all.getContent()); map.put("totalElements",all.getTotalElements()); return map; }

 

遇到的問題:

1、手工分頁,無查詢總條數返回。使用Page<T> 、countQuery="select count(*) from ..."獲得總條數

2、當多表查詢、嵌套查詢時,Pageable使用遇到問題,總是會獲取第一個表的別名為查詢字段的前綴。(不建議使用:查詢結果返回List,用subList截取結果)

int fromIndex = pageable.getPageNumber() * pageable.getPageSize();
int toIndex = fromIndex + pageable.getPageSize();
maps.put("content", lists.subList(fromIndex, lists.size() > toIndex ? toIndex : lists.size()));
maps.put("totalElements", lists.size());

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM