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。
推薦閱讀:
- Spring Data Jpa框架最佳實踐示例
- 在Spring Data JPA中引入Querydsl的實現方式
- 基於spring data jpa @query返回map的踩坑記錄
- python內置數據類型使用方法和繼承關系
- PHP實現獲取MySQL數據庫的記錄數據