Zuoren記事が教えられています - 私は言葉遣いを知りません
@Autowired プライベートMongoTemplate mongoTemplate。 @Autowired プライベートMongoPageHandler mongoPageHandler。 公共の一覧<地図>ハンドラ(QueryDataByConditionsCommandコマンド)EasywareException {スロー 基準基準=新基準を(); Validate.execAssert(command.getInstanceItems()= NULL、 "设置默认查询条件请"!)。 mongoPageHandler.jointParams(command.getInstanceItems()、基準)。 ページング可能ページング可能=新しいPageRequest(command.getOffset()、command.getLimit()); 一覧<地図>結果= mongoTemplate.find(新しいクエリ()。addCriteria(基準).with(ページング可能).with(新しいソート(Direction.ASC、 "日付"))、Map.class、command.getEntityName()) ; 結果を返します。 }
MongoPageHandler:
輸入com.easyware.comman.controller.PagedQueryResult。 輸入com.easyware.comman.domain.AuditEntity。 輸入com.google.common.collect.Lists。 輸入java.util.HashMapを; インポートするjava.util.Iterator; 輸入はjava.util.List; 輸入java.util.Map; 輸入java.util.UUID。 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.data.domain.Sort。 輸入org.springframework.data.domain.Sort.Direction。 輸入org.springframework.data.domain.Sort.Order。 輸入org.springframework.data.mongodb.core.MongoTemplate。 輸入org.springframework.data.mongodb.core.query.Criteria。 輸入org.springframework.data.mongodb.core.query.Query。 輸入org.springframework.stereotype.Component。 @Component パブリッククラスMongoPageHandler { = 1のpublic static final int型FIRST_PAGE_NUM。 public static final String型のID = "_id"。 public static final String型のCREATE_TIME = "CREATETIME"。 民間最終MongoTemplate mongoTemplate。 @Autowired 公共MongoPageHandler(MongoTemplate mongoTemplate){ this.mongoTemplate = mongoTemplate。 } パブリック<Tが延びるAuditEntity> PagedQueryResult <T> pageQuery(地図の<string、オブジェクト> paramsMap、クラス<T> entityClass、整数のpageSize、整数PAGENUM、文字列lastId、ブールisNextPage){ this.jointParams(paramsMap、基準)。 クエリのクエリ=新しいクエリ()。 基準の基準=新基準(); query.addCriteria(基準)。 長い合計= this.mongoTemplate.count(クエリ、entityClass)。 整数ページ=(int型)Math.ceil((ダブル)の合計/(ダブル)のpageSize)。 IF(PAGENUM <= 0 || PAGENUM>ページ){ PAGENUM = 1。 } IF(!PAGENUM = 1){ IF(isNextPage){ 。criteria.and( "_ ID")GT(UUID.fromString(lastId))。 }他{ criteria.and( "_ ID")LT(UUID.fromString(lastId))。 } } query.limit(pageSizeを)。 query.addCriteria(基準)。 リスト<T> entityList = this.mongoTemplate.find(クエリ、entityClass)。 PagedQueryResult <T> pagedQueryResult =新しいPagedQueryResult()。 pagedQueryResult.setTotal((INT)の合計)。 pagedQueryResult.setList(entityList)。 pagedQueryResultを返します。 } 公共PagedQueryResult <T> pageQuery <TはAuditEntity延び>(地図<文字列、オブジェクト> paramsMap、クラス<T> entityClass、整数の上限を、整数、ソート、ソート、列COLLECTIONNAMEオフセット){ クエリのクエリ=新しいクエリ()。 基準の基準=新基準(); this.jointParams(paramsMap、基準)。 query.addCriteria(基準)。 長い合計= COLLECTIONNAME == nullの?this.mongoTemplate.count(クエリ、entityClass):this.mongoTemplate.count(クエリ、entityClass、COLLECTIONNAME)。 整数ページ=(INT)Math.ceil((二重)の合計/(ダブル)限界)。 PagedQueryResult <T> pagedQueryResult =新しいPagedQueryResult()。 pagedQueryResult.setTotal((INT)の合計)。 (オフセット<= 0)場合、{ = 1を相殺。 }(>ページオフセット)他の場合は{ pagedQueryResultを返します。 } (ヌル=ソート!){もし query.with(ソート)。 }他{ query.with(Sort.by(Lists.newArrayList(新しい注文[] {新規注文(Direction.DESC、 "CREATETIME")})))。 } INT(オフセット- 1)* =制限をスキップ。 (スキップ)(ロング).limit(制限)query.skip。 リスト<T> entityList = COLLECTIONNAME == nullの?this.mongoTemplate.find(クエリ、entityClass):this.mongoTemplate.find(クエリ、entityClass、COLLECTIONNAME)。 pagedQueryResult.setList(entityList)。 pagedQueryResultを返します。 } 公共ボイドjointParams(地図の<string、オブジェクト> paramsMap、基準条件){ 地図<文字列、MongoPageHandler.ScopeParams>マップ=新しいHashMapの()。 。反復子VAR4 = paramsMap.keySet()反復子(); 一方、(var4.hasNext()){ 文字列COL =(文字列)var4.next(); 文字列str; オブジェクトobj; STR = col.replace( "から"、 ""); MongoPageHandler.ScopeParams scopeParams; IF(col.contains() "から"){ OBJ = paramsMap.get(COL)。 scopeParams =(MongoPageHandler.ScopeParams)map.get(STR)。 IF(scopeParams == NULL){ scopeParams =新しいMongoPageHandler.ScopeParams()。 scopeParams.name = STR。 map.put(STR、scopeParams)。 } scopeParams.gteValue = OBJ。 }そうであれば(col.contains( "から")){ STR = col.replace( "を"、 ""); OBJ = paramsMap.get(COL)。 scopeParams =(MongoPageHandler.ScopeParams)map.get(STR)。 scopeParams =新しいMongoPageHandler.ScopeParams(); scopeParams.name = STR。 map.put(STR、scopeParams)。 } scopeParams.lteValue = OBJ。 }そうであれば(paramsMap.getストリングのinstanceof(COL)){ STR =「^ [0-9A-F] {8} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {12} $ "。 IF(((文字列)paramsMap.get(COL))と一致する(「^ [0-9A-F] {8} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {12} $ ")){ criteria.and(COL).is(UUID.fromString(paramsMap.get(COL).toString() )); System.out.println(UUID.fromString(paramsMap.get(COL).toString()))。 }他{ criteria.and(COL).regex( "*?" + paramsMap.get(COL)+、 "I"、 "*。"); } }他{ criteria.and(COL).is(paramsMap.get(COL))。 } } 。VAR4 = map.values()反復子(); 一方、(TRUE){ 一方(var4.hasNext()){ MongoPageHandler.ScopeParams SP =(MongoPageHandler.ScopeParams)var4.next(); IF(!sp.gteValue = NULL && sp.lteValue = NULL){ criteria.and(sp.name).gte(sp.gteValue).lte(sp.lteValue)。 }そうであれば(!sp.gteValue = NULL){ criteria.and(sp.name).gte(sp.gteValue)。 }他{ criteria.and(sp.name).lte(sp.lteValue)。 } } を返します。 } } publicクラスScopeParams { 公共の文字列名。 パブリックオブジェクトgteValue。 パブリックオブジェクトlteValue。 パブリックScopeParams(){ } } }