最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢與in查詢功能

 更新時(shí)間:2018年12月07日 12:04:31   作者:執(zhí)筆記憶的空白  
今天小編就為大家分享一篇關(guān)于Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢與in查詢功能,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

由于需要用MongoDB緩存數(shù)據(jù),所以自己寫了一套公共的存放和讀取方法

具體如下:

存放mongodb:

/**
   * 公共方法:設(shè)置Object類型緩存
   * @author shijing
   * @param param
   * @param sysGuid
   */
  public void setObjData(Map<String,Object> param, String sysGuid, String enumBpd){
    DBObject dbObject = new BasicDBObject();
    dbObject.putAll(param);
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(dbObject,collectionName);
  }
  /**
   * 公共方法:設(shè)置List緩存
   * @author shijing
   * @param paramList
   * @param sysGuid
   */
  public void setListData(List<Map<String,Object>> paramList, String sysGuid, String enumBpd){
    List<DBObject> list = new ArrayList<>();
    if(CollectionUtils.isNotNull(paramList)){
      for (Map<String,Object> param : paramList){
        DBObject dbObject = new BasicDBObject();
        dbObject.putAll(param);
        list.add(dbObject);
      }
    }
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(list,collectionName);

mongoDao里面的方法:

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

讀取方法

/**
   * 通過關(guān)鍵字模糊查詢問題和答案庫
   * @param param
   * @return
   */
  @Override
  public List<Map<String, Object>> searchQuestionAndAnswerByKeyword(Map<String, Object> param) {
    List<Map<String,Object>> searchList = new ArrayList<>();
    Map<String,Object> userInfo = SessionUtils.getUserInfo();
    String sysGuid = userInfo.get("sys_guid").toString();
    String collectionName = EnumBpd.getBpdType(EnumBpd.HELP_PAGE_LIST.getType())+sysGuid;
    //注釋里面這種方式雖然能模糊查詢,但是容易漏掉數(shù)據(jù),切記切記?。?!
    //Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$", Pattern.CASE_INSENSITIVE);
    BasicDBObject query= new BasicDBObject();
    //模糊查詢的字段設(shè)置
    query.put("page_html", Pattern.compile((String) param.get("keyword")));
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DBObject> list = dbCursor.toArray();
    for (DBObject dbObject: list){
      searchList.add(dbObject.toMap());
    }
    //模糊查到的數(shù)據(jù)進(jìn)行組裝
    return getQuestionAndAnswerList(searchList);
  }
  /**
   * 公共方法:批量—— in方法查詢List數(shù)據(jù)
   * @author shijing
   * @param ids id集合
   * @param paramMap 其他參數(shù)
   * @param columnName in字段列名
   * @param collectionName 表名
   * @return
   */
  @Override
  public List<Map<String, Object>> batchSearchPageListByIds(List<String> ids, Map<String,
      Object> paramMap, String columnName, String collectionName) {
    List<Map<String,Object>> searchList = new ArrayList<>();
    BasicDBObject query= new BasicDBObject();
    //批量查詢,in
    if (CollectionUtils.isNotEmpty(ids)){
      BasicDBList values = new BasicDBList();
      values.addAll(ids);
      query.put(columnName, new BasicDBObject("$in",values));
    }
    //拼接參數(shù)
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DBObject> list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
        searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通過參數(shù)獲取List數(shù)據(jù)
   * @author shijing
   * @param paramMap 參數(shù)
   * @param collectionName  表名
   * @return
   */
  @Override
  public List<Map<String, Object>> getListByParam(Map<String, Object> paramMap,String collectionName){
    List<Map<String,Object>> searchList = new ArrayList<>();
    BasicDBObject query= new BasicDBObject();
    //拼接參數(shù)
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List<DBObject> list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
        searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通過參數(shù)獲取Object數(shù)據(jù)
   * @author shijing
   * @param paramMap
   * @param collectionName 表名
   * @return
   */
  @Override
  public Map<String, Object> getObjectByParam(Map<String, Object> paramMap, String collectionName) {
    Map<String,Object> webSiteInfo = new HashMap<>();
    BasicDBObject query= new BasicDBObject();
    //拼接參數(shù)
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
        query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBObject dbObject = mongoDao.findOne(query,collectionName);
    if(dbObject!=null){
      return dbObject.toMap();
    }
    return webSiteInfo;
  }

注意事項(xiàng):

mongodb模糊查詢時(shí)

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

這種方式存在bug, 容易漏掉數(shù)據(jù)

應(yīng)該使用下面這種方式:

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

先記錄到這吧,有需要在補(bǔ)充,批量in方法也在上述代碼里面。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Java中的Lombok使用及工作原理詳解

    Java中的Lombok使用及工作原理詳解

    這篇文章主要介紹了Java中的Lombok使用及工作原理詳解,Lombok是一個(gè)Java庫,能自動(dòng)插入編輯器并構(gòu)建工具,簡(jiǎn)化Java開發(fā),通過添加注解的方式,不需要為類編寫getter或eques方法,同時(shí)可以自動(dòng)化日志變量,需要的朋友可以參考下
    2023-10-10
  • SpringBoot+Jpa項(xiàng)目配置雙數(shù)據(jù)源的實(shí)現(xiàn)

    SpringBoot+Jpa項(xiàng)目配置雙數(shù)據(jù)源的實(shí)現(xiàn)

    本文主要介紹了SpringBoot+Jpa項(xiàng)目配置雙數(shù)據(jù)庫源的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • SpringBoot整合Ldap的實(shí)現(xiàn)示例

    SpringBoot整合Ldap的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot整合Ldap的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 全面探究 Java 內(nèi)部類

    全面探究 Java 內(nèi)部類

    說起內(nèi)部類這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺得不熟悉。原因是平時(shí)編寫代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來一探究竟
    2021-09-09
  • SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢

    SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢

    Mybatis-Plus(簡(jiǎn)稱MP)是一個(gè)Mybatis的增強(qiáng)工具,只是在Mybatis的基礎(chǔ)上做了增強(qiáng)卻不做改變,MyBatis-Plus支持所有Mybatis原生的特性,本文給大家介紹了SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢,需要的朋友可以參考下
    2024-08-08
  • Java定時(shí)任務(wù)詳解

    Java定時(shí)任務(wù)詳解

    定時(shí)任務(wù)在項(xiàng)目中經(jīng)常會(huì)使用到,本文主要根據(jù)博主自己使用定時(shí)的經(jīng)驗(yàn)分如下幾點(diǎn)介紹定時(shí)任務(wù):1、Quartz定時(shí)任務(wù)簡(jiǎn)介及Spring配置Quartz定時(shí)任務(wù);2、SchedulerFactory對(duì)定時(shí)任務(wù)進(jìn)行增刪改查
    2017-04-04
  • Java利用Socket類實(shí)現(xiàn)TCP通信程序

    Java利用Socket類實(shí)現(xiàn)TCP通信程序

    TCP通信能實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)交互,通信的兩端,要嚴(yán)格區(qū)分為客戶端與服務(wù)端,下面我們就來看看Java如何利用Socket類實(shí)現(xiàn)TCP通信程序吧
    2024-02-02
  • 深入解析Java中的數(shù)據(jù)類型與變量

    深入解析Java中的數(shù)據(jù)類型與變量

    這篇文章主要介紹了深入解析Java中的數(shù)據(jù)類型與變量,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Maven dependency中的scope案例講解

    Maven dependency中的scope案例講解

    Maven的一個(gè)哲學(xué)是慣例優(yōu)于配置(Convention Over Configuration), Maven默認(rèn)的依賴配置項(xiàng)中,scope的默認(rèn)值是compile,本文給大家介紹Maven dependency中的scope案例講解,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 圖文詳解java內(nèi)存回收機(jī)制

    圖文詳解java內(nèi)存回收機(jī)制

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了java內(nèi)存回收機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論

玛纳斯县| 东光县| 泗洪县| 平陆县| 湖口县| 宁晋县| 嘉善县| 汝城县| 类乌齐县| 贞丰县| 龙门县| 通江县| 博兴县| 大方县| 抚远县| 弥渡县| 蒙城县| 广平县| 滨州市| 台江县| 池州市| 博野县| 泸西县| 新绛县| 石首市| 喀什市| 手游| 桦南县| 蕲春县| 惠州市| 康马县| 雅安市| 玉屏| 芷江| 长沙县| 松滋市| 海安县| 南皮县| 林西县| 炉霍县| 汕头市|