【接口类定义】
  1. /**
  2. * 项目名:SpiderCrawler
  3. * 文件名:MongoDBDao.java
  4. * 描述:TODO(用一句话描述该文件做什么)
  5. */
  6. package com.newsTest.dao;
  7. import java.util.ArrayList;
  8. import com.mongodb.DB;              //导入数据库DB
  9. import com.mongodb.DBCollection;    //导入集合DBCollection
  10. import com.mongodb.DBObject;        //导入对象DBObject
  11. /**
  12. * 类名: MongoDBDao
  13. * 包名: com.newsTest.dao
  14. * 描述: TODO(这里用一句话描述这个类的作用)
  15. */
  16. public interface MongoDBDao {
  17. /**
  18. * 方法名:getDb
  19. * 描述:获取指定的mongodb数据库
  20. * @param dbName
  21. * @return
  22. */
  23. public DB getDb(String dbName);
  24. /**
  25. * 方法名:getCollection
  26. * 描述:获取指定mongodb数据库的collection集合
  27. * @param dbName    数据库名
  28. * @param collectionName    数据库集合
  29. * @return
  30. */
  31. public DBCollection getCollection(String dbName, String collectionName);
  32. /**
  33. * 方法名:inSert
  34. * 描述:向指定的数据库中添加给定的keys和相应的values
  35. * @param dbName
  36. * @param collectionName
  37. * @param keys
  38. * @param values
  39. * @return
  40. */
  41. public boolean inSert(String dbName, String collectionName, String[] keys, Object[] values);
  42. /**
  43. *
  44. * 方法名:delete
  45. * 作者:zhouyh
  46. * 创建时间:2014-8-30 下午04:09:00
  47. * 描述:删除数据库dbName中,指定keys和相应values的值
  48. * @param dbName
  49. * @param collectionName
  50. * @param keys
  51. * @param values
  52. * @return
  53. */
  54. public boolean delete(String dbName, String collectionName, String[] keys, Object[] values);
  55. /**
  56. * 方法名:find
  57. * 描述:从数据库dbName中查找指定keys和相应values的值
  58. * @param dbName
  59. * @param collectionName
  60. * @param keys
  61. * @param values
  62. * @param num
  63. * @return
  64. */
  65. public ArrayList<DBObject> find(String dbName, String collectionName, String[] keys, Object[] values, int num);
  66. /**
  67. * 方法名:update
  68. * 作者:zhouyh
  69. * 创建时间:2014-8-30 下午04:17:54
  70. * 描述:更新数据库dbName,用指定的newValue更新oldValue
  71. * @param dbName
  72. * @param collectionName
  73. * @param oldValue
  74. * @param newValue
  75. * @return
  76. */
  77. public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);
  78. /**
  79. * 方法名:isExit
  80. * 描述:判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在
  81. * @param dbName
  82. * @param collectionName
  83. * @param keys
  84. * @param values
  85. * @return
  86. */
  87. public boolean isExit(String dbName, String collectionName, String key, Object value);
  88. }
 
 
【借口类实现】
  1. /**
  2. * 项目名:SpiderCrawler
  3. * 文件名:MongoDBDaoImpl.java
  4. * 描述:TODO(用一句话描述该文件做什么)
  5. */
  6. package com.newsTest.dao.impl;
  7. import java.net.UnknownHostException;  //导入URL的相关Exception的jar包
  8. import java.util.ArrayList;
  9. import com.newsTest.dao.MongoDBDao;    //导入接口类的定义
  10. import com.mongodb.BasicDBObject;
  11. import com.mongodb.DB;
  12. import com.mongodb.DBCollection;
  13. import com.mongodb.DBCursor;          //导入游标
  14. import com.mongodb.DBObject;
  15. import com.mongodb.MongoClient;
  16. import com.mongodb.MongoClientOptions;
  17. import com.mongodb.MongoException;
  18. import com.mongodb.WriteResult;
  19. /**
  20. * 类名: MongoDBDaoImpl
  21. * 包名: com.newsTest.dao.impl
  22. * 描述: TODO(这里用一句话描述这个类的作用)
  23. */
  24. public class MongoDBDaoImpl implements MongoDBDao{
  25. /*MongoDBDao是前面自己定义的接口,而非系统自带*/
  26. /**
  27. * MongoClient的实例代表数据库连接池,是线程安全的,可以被多线程共享,客户端在多线程条件下仅维持  一个实例即可
  28. * Mongo是非线程安全的,目前mongodb API中已经建议用MongoClient替代Mongo
  29. */
  30. private MongoClient mongoClient = null;
  31. /**
  32. * 私有的构造函数
  33. */
  34. private MongoDBDaoImpl(){
  35. if(mongoClient == null){
  36. MongoClientOptions.Builder build = new MongoClientOptions.Builder();
  37. build.connectionsPerHost(50);
  38. //与目标数据库能够建立的最大connection数量为50
  39. build.autoConnectRetry(true);
  40. //自动重连数据库启动
  41. build.threadsAllowedToBlockForConnectionMultiplier(50);
  42. //如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
  43. /*
  44. * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
  45. * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
  46. * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
  47. */
  48. build.maxWaitTime(1000*60*2);
  49. build.connectTimeout(1000*60*1);    //与数据库建立连接的timeout设置为1分钟
  50. MongoClientOptions myOptions = build.build();
  51. try {
  52. //数据库连接实例
  53. mongoClient = new MongoClient("127.0.0.1", myOptions);
  54. } catch (UnknownHostException e) {
  55. // TODO 这里写异常处理的代码
  56. e.printStackTrace();
  57. } catch (MongoException e){
  58. e.printStackTrace();
  59. }
  60. }
  61. }

MongoDB接口类函数的更多相关文章

  1. Python Mongodb接口

    Python Mongodb接口 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. 同时,MongoDB 是一个介于关系 ...

  2. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  3. Mongodb相关 (Shell命令 / mongoose)

    Mongodb相关 1.创建一个文件夹作为数据库存放的目录 2.打开cmd cd到Mongodb/bin目录去 3.执行mongod --dbpath "第一项创建的文件夹(数据库数据存放目 ...

  4. 【一】mongodb安装及配置

    一.mongodb安装 1.下载并解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz tar ...

  5. 技术讨论]mongodb驱动的正确使用方法

    原文地址:http://cnodejs.org/topic/5190d61263e9f8a542acd83b mongo数据库在nodejs平台有2个常用驱动,mongodb和mongoose,mon ...

  6. 如何使用MongoDB+Springboot实现分布式ID?

    转载请标明出处: http://blog.csdn.net/forezp/article/details/69056017 本文出自方志朋的博客 一.背景 如何实现分布式id,搜索相关的资料,一般会给 ...

  7. MongoDB(5)- Document 文档相关

    Documents MongoDB 的文档可以理解为关系型数据库(Mysql)的一行记录 MongoDB 将数据记录为 BSON 格式的文档 BSON 是 JSON 文档的二进制表示,但它支持的数据类 ...

  8. nosql数据库学习

    1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...

  9. 15个nosql数据库

    1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...

随机推荐

  1. mysql——单表查询——聚合函数——示例

    ), km ), cj ) ); select * from score; ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ; 查询此同学的总成绩: ; ...

  2. python logger 日志模块

    logger 日志 """logging配置""" import osimport logging.config # 定义三种日志输出格式 ...

  3. 交换机安全学习笔记 第二章 MAC地址泛洪攻击

    本文为书中相关知识的摘要,由于书中以思科设备为配置依据,所以笔记中补充了华为.H3C设备的相关配置.华为设备配置参考华为S2352EI 产品版本:V100R005C01文档版本:02.  H3C配置参 ...

  4. Jackson快速入门

    1.Jackson的简单用法 2.Jackson框架的高阶应用 3.Jackson不支持Java8 Date解决方法 https://www.cnblogs.com/mkxzy/p/7091381.h ...

  5. System.InsufficientMemoryException:无法分配536870912字节的托管内存缓冲区。可用内存量可能不足

    一个病人住院太久,一次性打印护理表单超过3000条时报如标题所示的错误, 个人查阅分析应该可以从如下几方面入手: 一:查看程序客户端和服务端的配置文件相关属性是否限制了缓存最大值 (应该不是这个问题, ...

  6. LayUI 多选框动态加载、启用、禁用、赋值、取值等js实现

    例如多选框如下: <div class="layui-form"> <select xm-select="city"> </sel ...

  7. [MtOI2019]永夜的报应 题解

    题面 题面说的乱糟糟的看起来似乎是个可持久化线性基: 然而~ 一个式子搞定一切: a^b<=a+b 那么把所有数异或起来便是答案: #include <bits/stdc++.h> ...

  8. 洛谷 P3388 【模板】割点(割顶)(Tarjan)

    题目链接 https://www.luogu.org/problemnew/show/P3388 模板题 解题思路 什么是割点? 怎样求割点? dfn :即时间戳,一张图的dfs序(dfs遍历时出现的 ...

  9. MLS(移动最小二乘)

    https://blog.csdn.net/weixin_41484240/article/details/81204113 https://blog.csdn.net/baidu_38127162/ ...

  10. jstl用法 简介

    <c:choose> <c:when test="${salary <= 0}"> 太惨了. </c:when> <c:when t ...