zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    AndRodi Strudio中的按钮时件
    Intent(三)向下一个活动传递数据
    Intent(二)隐式调用intent
    用PopupWindow做下拉框
    环形进度条
    Android Studio分类整理res/Layout中的布局文件(创建子目录)
    Android无需申请权限拨打电话
    使用ViewPager切换Fragment时,防止频繁调用OnCreatView
    定制 黑色描边、白色背景、带圆角 的背景
    Android 底部弹出Dialog(横向满屏)
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11590367.html
Copyright © 2011-2022 走看看