日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

queryDSL复杂查询的分页和自定义排序实现

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 queryDSL复杂查询的分页和自定义排序实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概要目錄

    • 一、首先自定義存儲庫的定義規范和引用方式,要特別注意,[可參考我之前關于自定義存儲庫的總結](https://blog.csdn.net/qq_42105629/article/details/100099643)
      • 1.1、代碼示例
      • 1.2、不足之處

一、首先自定義存儲庫的定義規范和引用方式,要特別注意,可參考我之前關于自定義存儲庫的總結

1.1、代碼示例

package com.wondertek.oes.workbench.manage.repository.customize;import com.google.common.collect.Lists; import com.querydsl.core.QueryResults; import com.querydsl.core.Tuple; import com.querydsl.core.types.Predicate; import com.querydsl.jpa.impl.JPAQuery; import com.wondertek.oes.workbench.commons.enums.NodeResultEnum; import com.wondertek.oes.workbench.commons.model.*; import com.wondertek.oes.workbench.manage.vo.baseQuery.AssetInfoVo; import com.wondertek.oes.workbench.manage.vo.baseQuery.AssetPageVo; import com.wondertek.oes.workbench.manage.vo.baseQuery.McnRecordVo; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository;import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List;@Repository public class EnRepositoryCustomImpl implements EnRepositoryCustom {@PersistenceContextprivate EntityManager em;/*** mcn詳情查詢** @param groupId 工作組編號* @param programId 節目編號* @return List*/@Overridepublic List<McnRecordVo> McnRecordInfo(Long groupId, Long programId) {JPAQuery<McnRecordVo> query = new JPAQuery<>(em);QMcnInfo m = QMcnInfo.mcnInfo;QSubpInfo s = QSubpInfo.subpInfo;QTask t = QTask.task;QWorkGroup w = QWorkGroup.workGroup;List<Tuple> list = query.select(m.programId,s.contentId,m.assetId,s.assetName,m.disposeChannel,m.endTime,t.name,m.url,w.groupName).from(m).leftJoin(s).on(m.programId.eq(s.programId)).leftJoin(t).on(m.taskId.eq(t.taskId)).leftJoin(w).on(m.groupId.eq(w.groupId)).where(m.programId.eq(programId)).where(m.groupId.eq(groupId)).fetchResults().getResults();return this.tupleToMcnRecordVo(list);}/*** 動態條件查詢mcn展現運營** @param predicate 動態條件* @return List<McnRecordVo>*/@Overridepublic Page<McnRecordVo> McnRecordList(Predicate predicate, Pageable pageable) {JPAQuery<McnRecordVo> query = new JPAQuery<>(em);QMcnInfo m = QMcnInfo.mcnInfo;QSubpInfo s = QSubpInfo.subpInfo;QTask t = QTask.task;QWorkGroup w = QWorkGroup.workGroup;QueryResults<Tuple> queryResults = query.select(m.programId,s.contentId,m.assetId,s.assetName,m.disposeChannel,m.endTime,t.name,w.groupName,m.mcnStatus,m.shareType).from(m).leftJoin(s).on(m.programId.eq(s.programId)).leftJoin(t).on(m.taskId.eq(t.taskId)).leftJoin(w).on(m.groupId.eq(w.groupId)).where(predicate).orderBy(m.endTime.desc()).offset(pageable.getOffset()).limit(pageable.getPageSize()).fetchResults();List<Tuple> tuples = queryResults.getResults();List<McnRecordVo> vos = this.tupleToMcnRecordVo(tuples);return new PageImpl<>(vos, pageable, queryResults.getTotal());}/*** 查詢展現運營列表** @param predicate 動態條件* @return List<AssetPageVo>*/@Overridepublic Page<AssetPageVo> AssetPageList(Predicate predicate, Pageable pageable) {JPAQuery<McnRecordVo> query = new JPAQuery<>(em);QCatalogInfo ca = QCatalogInfo.catalogInfo;QPublishInfo pub = QPublishInfo.publishInfo;QueryResults<Tuple> queryResults = query.select(ca.assetId,ca.assetName,pub.programId,pub.productName).from(ca).leftJoin(pub).on(ca.assetId.eq(pub.assetId)).where(predicate).orderBy(pub.publishTime.desc()).offset(pageable.getOffset()).limit(pageable.getPageSize()).fetchResults();List<Tuple> tuples = queryResults.getResults();long total = queryResults.getTotal();List<AssetPageVo> vos = this.tupleToAssetPageVo(tuples);return new PageImpl<>(vos, pageable, total);}/*** 展現運營詳情展示** @param groupId 工作組ID* @param programId 節目ID* @return AssetInfoVo*/@Overridepublic AssetInfoVo AssetRecordInfo(Long groupId, Long programId) {JPAQuery<AssetInfoVo> query = new JPAQuery<>(em);QPublishInfo pub = QPublishInfo.publishInfo;QWorkGroup wg = QWorkGroup.workGroup;QTask ta = QTask.task;List<Tuple> list = query.select(pub.programId,pub.productName,pub.assetId,pub.assetName,wg.groupName,ta.name).from(pub).leftJoin(wg).on(pub.groupId.eq(wg.groupId)).leftJoin(ta).on(pub.taskId.eq(ta.taskId)).where(pub.publishStatus.eq(NodeResultEnum.PublishStatus.FINISHED.getKey()), pub.programId.eq(programId), pub.groupId.eq(groupId)).fetchResults().getResults();if (list != null && list.size() > 0) {Tuple tu = list.get(0);return new AssetInfoVo(tu.get(pub.programId),tu.get(pub.productName),tu.get(pub.assetId),tu.get(pub.assetName),tu.get(wg.groupName),tu.get(ta.name));}return null;}/*** 抽取公共方法,mcn詳情** @param tuple 入參* @return List<McnRecordVo>*/private List<McnRecordVo> tupleToMcnRecordVo(List<Tuple> tuple) {QMcnInfo m = QMcnInfo.mcnInfo;QSubpInfo s = QSubpInfo.subpInfo;QTask t = QTask.task;QWorkGroup w = QWorkGroup.workGroup;List<McnRecordVo> list1 = Lists.newArrayList();for (Tuple tu : tuple) {McnRecordVo vo = new McnRecordVo();vo.setUrl(tu.get(m.url));vo.setProgramId(tu.get(m.programId));vo.setContentId(tu.get(s.contentId));vo.setAssetId(tu.get(m.assetId));vo.setAssetName(tu.get(s.assetName));vo.setDisposeChannel(tu.get(m.disposeChannel));vo.setDisposeTime(tu.get(m.endTime));vo.setTaskName(tu.get(t.name));vo.setGroupName(tu.get(w.groupName));vo.setMcnStatus(tu.get(m.mcnStatus));vo.setShareType(tu.get(m.shareType));list1.add(vo);}return list1;}/*** 抽取公共方法** @param tuple List<Tuple> tuple* @return List<AssetPageVo>*/private List<AssetPageVo> tupleToAssetPageVo(List<Tuple> tuple) {QCatalogInfo ca = QCatalogInfo.catalogInfo;QPublishInfo pub = QPublishInfo.publishInfo;List<AssetPageVo> list1 = Lists.newArrayList();for (Tuple tu : tuple) {AssetPageVo vo = new AssetPageVo();vo.setProgramId(tu.get(pub.programId));vo.setProductName(tu.get(pub.productName));vo.setAssetId(tu.get(ca.assetId));vo.setAssetName(tu.get(ca.assetName));list1.add(vo);}return list1;}}

1.2、不足之處

返回的元組數據,需要我們手動去轉,下面我總結了一些可直接映射我們自定義的VO對象的方法

QueryDsl自定義返回對象

總結

以上是生活随笔為你收集整理的queryDSL复杂查询的分页和自定义排序实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。