由于需要用MongoDB缓存数据,所以自己写了一套公共的存放和读取方法

具体如下:

存放mongodb:

/**
   * 公共方法:设置 类型缓存
   * @author shijing
   * @param param
   * @param sysGuid
   */
  public void setObjData(Map<String, > param, String sysGuid, String enumBpd){
    DB  db  = new BasicDB ();
    db .putAll(param);
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(db ,collectionName);
  }
  /**
   * 公共方法:设置List缓存
   * @author shijing
   * @param paramList
   * @param sysGuid
   */
  public void setListData(List<Map<String, >> paramList, String sysGuid, String enumBpd){
    List<DB > list = new ArrayList<>();
    if(CollectionUtils.isNotNull(paramList)){
      for (Map<String, > param : paramList){
        DB  db  = new BasicDB ();
        db .putAll(param);
        list.add(db );
      }
    }
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(list,collectionName);

mongoDao里面的方法:

public void insertToCol(DB  document, String collectionName) {
    dropCol(collectionName);
    DBCollection dbCollection = mongoTemplate.createCollection(collectionName);
    dbCollection.insert(document);
  }
  public void insertToCol(List<DB > documents, String collectionName) {
    dropCol(collectionName);
    DBCollection dbCollection = mongoTemplate.createCollection(collectionName);
    dbCollection.insert(documents);
  }

读取方法

/**
   * 通过关键字模糊查询问题和答案库
   * @param param
   * @return
   */
  @Override
  public List<Map<String,  >> searchQuestionAndAnswerByKeyword(Map<String,  > param) {
    List<Map<String, >> searchList = new ArrayList<>();
    Map<String, > userInfo = SessionUtils.getUserInfo();
    String sysGuid = userInfo.get(\"sys_guid\").toString();
    String collectionName = EnumBpd.getBpdType(EnumBpd.HELP_PAGE_LIST.getType())+sysGuid;
    //注释里面这种方式虽然能模糊查询,但是容易漏掉数据,切记切记!!!
    //Pattern pattern = Pattern.compile(\"^.*\" + param.get(\"keyword\") +\".*$\", Pattern.CASE_INSENSITIVE);
    BasicDB  query= new BasicDB ();
    //模糊查询的字段设置
    query.put(\"page_html\", Pattern.compile((String) param.get(\"keyword\")));
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DB > list = dbCursor.toArray();
    for (DB  db : list){
      searchList.add(db .toMap());
    }
    //模糊查到的数据进行组装
    return getQuestionAndAnswerList(searchList);
  }
  /**
   * 公共方法:批量—— in方法查询List数据
   * @author shijing
   * @param ids id集合
   * @param paramMap 其他参数
   * @param columnName in字段列名
   * @param collectionName 表名
   * @return
   */
  @Override
  public List<Map<String,  >> batchSearchPageListByIds(List<String> ids, Map<String,
       > paramMap, String columnName, String collectionName) {
    List<Map<String, >> searchList = new ArrayList<>();
    BasicDB  query= new BasicDB ();
    //批量查询,in
    if (CollectionUtils.isNotEmpty(ids)){
      BasicDBList values = new BasicDBList();
      values.addAll(ids);
      query.put(columnName, new BasicDB (\"$in\",values));
    }
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DB > list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DB  db : list){
        searchList.add(db .toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通过参数获取List数据
   * @author shijing
   * @param paramMap 参数
   * @param collectionName  表名
   * @return
   */
  @Override
  public List<Map<String,  >> getListByParam(Map<String,  > paramMap,String collectionName){
    List<Map<String, >> searchList = new ArrayList<>();
    BasicDB  query= new BasicDB ();
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DB > list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DB  db : list){
        searchList.add(db .toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通过参数获取 数据
   * @author shijing
   * @param paramMap
   * @param collectionName 表名
   * @return
   */
  @Override
  public Map<String,  > get ByParam(Map<String,  > paramMap, String collectionName) {
    Map<String, > webSiteInfo = new HashMap<>();
    BasicDB  query= new BasicDB ();
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DB  db  = mongoDao.findOne(query,collectionName);
    if(db !=null){
      return db .toMap();
    }
    return webSiteInfo;
  }

注意事项:

mongodb模糊查询时

Pattern pattern = Pattern.compile(\"^.*\" + param.get(\"keyword\") +\".*$\"

这种方式存在bug, 容易漏掉数据

应该使用下面这种方式:

query.put(\"page_html\", Pattern.compile((String) param.get(\"keyword\")));

先记录到这吧,有需要在补充,批量in方法也在上述代码里面。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

收藏 打印