Spring Data JPA 如何使用QueryDsl查詢並分頁

Spring Data JPA 使用QueryDsl查詢並分頁

 QProblemPoint qProblemPoint = QProblemPoint.problemPoint;
        Map<String,String> map = getWhere(param);
 
        JPAQuery<ProblemPoint> query = jpaQueryFactory
                .selectFrom(qProblemPoint)
                .where(
                        qProblemPoint.problemClassify.like(map.get("problemClassify")),//問題分類
                        qProblemPoint.problemLevel.like(map.get("problemLevel")),//問題級別
                        qProblemPoint.securityRiskEvent.like(map.get("securityRiskEvent")),//風險事件
                        qProblemPoint.riskItems.like(map.get("riskItems"))//安全風險項
                );
 
        List<ProblemPoint> list = query
                .offset(param.getStart())
                .limit(param.getLength()).fetch();
        long count = query.fetchCount();
  • QProblemPoint:是編譯出來的實體
  • query :根據條件查詢出來的集合
  • list:根據前臺傳來的進行分頁操作
  • .fetch():相當於.get() 可看出返回類型。

使用QueryDSL

補充springDataJpa進行復雜動態sql語句進行sql查詢 實現 關聯 分頁等功能

@Test
public void testComplexSelect() {
    QQyOnlineCall onlineCall = QQyOnlineCall.qyOnlineCall;
    QClientList clientList = QClientList.clientList;
    // page必須從1開始
    PageRequest request = PageRequest.of(0, 10);
    // 構建復雜查詢語句
    List<Tuple> result = mFactory.select(onlineCall.id, onlineCall.cUsesign, onlineCall.cYgscode, clientList.cClientname, clientList.cPhone1)
            .from(onlineCall)
            .leftJoin(clientList)
            .on(onlineCall.cClientid.eq(clientList.id))
            .where(onlineCall.cCom.eq("C0003"))
            .limit(request.getPageSize()) // 單頁查詢數量
            .offset(request.getPageSize() * request.getPageNumber()) // 偏移量
            .fetch();
    // 獲取結果
    for (Tuple tuple : result) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", tuple.get(onlineCall.id));
        map.put("useSign", tuple.get(onlineCall.cUsesign));
        map.put("ygsCode", tuple.get(onlineCall.cYgscode));
        map.put("clientName", tuple.get(clientList.cClientname));
        map.put("phone", tuple.get(clientList.cPhone1));
        System.out.println(JsonUtils.toJson(map));
    }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: