mongodb多条件分页查询(mongoTemplate分页查询)

被教作人篇--我不知道的写法

@Autowired
private MongoTemplate mongoTemplate;

@Autowired
private MongoPageHandler mongoPageHandler;

public List<Map> handler(QueryDataByConditionsCommand command) throws EasywareException {
        Criteria criteria = new Criteria();
        Validate.execAssert(command.getInstanceItems()!=null,"请设置默认查询条件");
        mongoPageHandler.jointParams(command.getInstanceItems(),criteria);
        Query query = new Query();
        query.addCriteria(criteria);
        query.skip(command.getOffset());
        query.limit(command.getLimit());
        List<Sort.Order> orders = new ArrayList();
        if (command.getOrderDescs() == null) {
            orders.add(new Sort.Order(Direction.DESC, "createTime"));
        } else {
            Iterator iterator = command.getOrderDescs().iterator();
            while(iterator.hasNext()) {
                OrderDesc orderDesc = (OrderDesc)iterator.next();
                orders.add(new Sort.Order(orderDesc.isAsc() ? Direction.ASC : Direction.DESC, orderDesc.getProperty()));
            }
        }
        Sort sort = Sort.by(orders);
        query.with(sort);
        List<Map> results = mongoTemplate.find(query,Map.class, command.getEntityName());
        return results;
}

  

MongoPageHandler:

代码已删除,可以看下面博主写的

感叹mongodb封装之完善,自己见识之匮乏!!!

 

一直自以为是mongodb封装的没想到是大佬手写的!!!

  1 @Component
  2 public class MongoPageHandler {
  3 
  4 
  5     /**
  6      * 将map转化为criteria条件
  7      * @param map
  8      * @param criteria
  9      * @version 1.0
 10      */
 11     public void transformation(Map<String, Object> map, Criteria criteria) {
 12         List<Param> params = new ArrayList<>();
 13         Iterator<String> iterator = map.keySet().iterator();
 14         while (iterator.hasNext()) {
 15             String key = iterator.next();
 16             if(key.contains("From")) {
 17                 String newKey = key.replace("From", "");
 18                 Map<String, Object> result = contains(params, newKey);
 19                 if((boolean)result.get("result")) {
 20                     Param param = (Param)result.get("data");
 21                     param.lteValue = map.get(newKey);
 22                     params.add(param);
 23                 }else {
 24                     Param param = new Param();
 25                     param.name = newKey;
 26                     param.lteValue = map.get(key);
 27                     params.add(param);
 28                 }
 29             }else if(key.contains("To")) {
 30                 String newKey = key.replace("To", "");
 31                 Map<String, Object> result = contains(params, newKey);
 32                 if((boolean)result.get("result")) {
 33                     Param param = (Param)result.get("data");
 34                     param.gteValue = map.get(newKey);
 35                     params.add(param);
 36                 }else {
 37                     Param param = new Param();
 38                     param.name = newKey;
 39                     param.gteValue = map.get(key);
 40                     params.add(param);
 41                 }
 42             } else {
 43                 criteria.and(key).is(map.get(key));
 44             }
 45 
 46             Iterator<Param> paramIterator = params.iterator();
 47             while (paramIterator.hasNext()) {
 48                 Param next = paramIterator.next();
 49                 if(next.lteValue != null && next.gteValue != null) {
 50                     criteria.and(next.name).lte(next.lteValue).gte(next.gteValue);
 51                 }else if (next.lteValue != null) {
 52                     criteria.and(next.name).gte(next.lteValue);
 53                 } else {
 54                     criteria.and(next.name).gte(next.gteValue);
 55                 }
 56             }
 57         }
 58     }
 59 
 60     public Map<String, Object> contains(List<Param> params, String name) {
 61         Map<String, Object> result = new HashMap<>();
 62         for(Param param : params) {
 63             if(param.name.equals(name)) {
 64                 result.put("result", true);
 65                 result.put("data", param);
 66                 return result;
 67             }
 68         }
 69         result.put("result", false);
 70         result.put("data", null);
 71         return result;
 72     }
 73 
 74     /**
 75      * 将map转化为criteria
 76      * @param map
 77      * @param criteria
 78      * @version 2.0
 79      */
 80     public void trans(Map<String, Object> map, Criteria criteria) {
 81         Map<String, Param> params = new HashMap<>();
 82         Iterator<String> iterator = map.keySet().iterator();
 83         while (iterator.hasNext()) {
 84             String key = iterator.next();
 85             if(key.contains("From")) {
 86                 String newKey = key.replace("From", "");
 87                 if(params.get(newKey) != null) {
 88                     Param param = (Param)params.get(key);
 89                     param.lteValue = map.get(key);
 90                     params.put(newKey, param);
 91                 }else {
 92                     Param param = new Param();
 93                     param.name = newKey;
 94                     param.lteValue = map.get(key);
 95                     params.put(newKey, param);
 96                 }
 97             }else if(key.contains("To")) {
 98                 String newKey = key.replace("To", "");
 99                 if(params.get(newKey) != null) {
100                     Param param = (Param)params.get(newKey);
101                     param.gteValue = map.get(key);
102                     params.put(newKey, param);
103                 }else {
104                     Param param = new Param();
105                     param.name = newKey;
106                     param.gteValue = map.get(key);
107                     params.put(newKey, param);
108                 }
109             } else {
110                 criteria.and(key).is(map.get(key));
111             }
112 
113             Iterator<Param> paramIterator = params.values().iterator();
114             while (paramIterator.hasNext()) {
115                 Param next = paramIterator.next();
116                 if(next.lteValue != null && next.gteValue != null) {
117                     criteria.and(next.name).lte(next.lteValue).gte(next.gteValue);
118                 }else if (next.lteValue != null) {
119                     criteria.and(next.name).gte(next.lteValue);
120                 } else {
121                     criteria.and(next.name).gte(next.gteValue);
122                 }
123             }
124         }
125     }
126 
127 
128     /**
129      * 将map转化为criteria
130      * @param map
131      * @param criteria
132      * @version 3.0
133      */
134     public void conversion(Map<String, Object> map, Criteria criteria) {
135         Map<String, Param> params = new HashMap<>();
136         Iterator<String> iterator = map.keySet().iterator();
137         while (iterator.hasNext()) {
138             String key = iterator.next();
139             if(key.contains("From")) {
140                 String newKey = key.replace("From", "");
141                 Param param = params.get(newKey);
142                 if(null == param) {
143                     param = new Param();
144                     param.name = newKey;
145                 }
146                 param.gteValue = map.get(key);
147                 params.put(newKey, param);
148             }else if(key.contains("To")) {
149                 String newKey = key.replace("To", "");
150                 Param param = params.get(newKey);
151                 if(param == null) {
152                     param = (Param)params.get(newKey);
153                     param.name = newKey;
154                 }
155                 param.lteValue = map.get(key);
156                 params.put(newKey, param);
157             } else {
158                 criteria.and(key).is(map.get(key));
159             }
160 
161             Iterator<Param> paramIterator = params.values().iterator();
162             while (paramIterator.hasNext()) {
163                 Param next = paramIterator.next();
164                 if(next.lteValue != null && next.gteValue != null) {
165                     criteria.and(next.name).lte(next.lteValue).gte(next.gteValue);
166                 }else if (next.lteValue != null) {
167                     criteria.and(next.name).gte(next.lteValue);
168                 } else {
169                     criteria.and(next.name).gte(next.gteValue);
170                 }
171             }
172         }
173     }
174 
175 
176     public class Param {
177         String name;
178         Object lteValue;
179         Object gteValue;
180         public Param() {
181         }
182     }
183 
184 }

思想在提升,代码更加简洁

posted @ 2019-09-26 13:21  尘世间迷茫的小书童  阅读(7599)  评论(1编辑  收藏  举报