• mongodb数据库接口的设计
  1. package storm.db;
  2.  
  3. import java.util.ArrayList;
  4. import com.mongodb.DB;
  5. import com.mongodb.DBCollection;
  6. import com.mongodb.DBObject;
  7.  
  8. /**
  9. * 类名: MongoDBDao
  10. * 作者:lky
  11. */
  12. public interface MongoDBDao {
  13. /**
  14. *
  15. * 方法名:getDb
  16. * 作者:lky
  17. * 描述:获取指定的mongodb数据库
  18. * @param dbName
  19. * @return
  20. */
  21. public DB getDb(String dbName);
  22. /**
  23. *
  24. * 方法名:getCollection
  25. * 作者:lky
  26. * 描述:获取指定mongodb数据库的collection集合
  27. * @param dbName 数据库名
  28. * @param collectionName 数据库集合名
  29. * @return
  30. */
  31. public DBCollection getCollection(String dbName, String collectionName);
  32. /**
  33. *
  34. * 方法名:inSert
  35. * 作者:lky
  36. * 描述:向指定的数据库中添加给定的keys和相应的values
  37. * @param dbName
  38. * @param collectionName
  39. * @param keys
  40. * @param values
  41. * @return
  42. */
  43. public boolean inSert(String dbName, String collectionName, String keys, Object values);
  44. /**
  45. *
  46. * 方法名:delete
  47. * 作者:lky
  48. * 描述:删除数据库dbName中,指定keys和相应values的值
  49. * @param dbName
  50. * @param collectionName
  51. * @param keys
  52. * @param values
  53. * @return
  54. */
  55. public boolean delete(String dbName, String collectionName, String keys, Object values);
  56. /**
  57. *
  58. * 方法名:find
  59. * 作者:lky
  60. * 描述:从数据库dbName中取出相应数目的数据
  61. * @param dbName
  62. * @param collectionName
  63. * @param keys
  64. * @param values
  65. * @param num
  66. * @return
  67. */
  68. public ArrayList<DBObject> find(String dbName, String collectionName, int num);
  69. /**
  70. *
  71. * 方法名:update
  72. * 作者:lky
  73. * 描述:更新数据库dbName,用指定的newValue更新oldValue
  74. * @param dbName
  75. * @param collectionName
  76. * @param oldValue
  77. * @param newValue
  78. * @return
  79. */
  80. public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);
  81. /**
  82. *
  83. * 方法名:isExit
  84. * 作者:lky
  85. * 描述:判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在
  86. * @param dbName
  87. * @param collectionName
  88. * @param keys
  89. * @param values
  90. * @return
  91. */
  92. public boolean isExit(String dbName, String collectionName, String key, Object value);
  93. }
  • 数据库连接池的实现
  1. package storm.db;
  2.  
  3. import java.net.UnknownHostException;
  4. import java.util.ArrayList;
  5.  
  6. import com.mongodb.BasicDBObject;
  7. import com.mongodb.DB;
  8. import com.mongodb.DBCollection;
  9. import com.mongodb.DBCursor;
  10. import com.mongodb.DBObject;
  11. import com.mongodb.MongoClient;
  12. import com.mongodb.MongoClientOptions;
  13. import com.mongodb.ServerAddress;
  14. import com.mongodb.WriteResult;
  15.  
  16. /*
  17. * mongodb数据库链接池
  18. */
  19. public class MongoDBDaoImpl implements MongoDBDao
  20. {
  21. private MongoClient mongoClient = null;
  22. private static final MongoDBDaoImpl mongoDBDaoImpl = new MongoDBDaoImpl();// 饿汉式单例模式
  23.  
  24. private MongoDBDaoImpl()
  25. {
  26. if (mongoClient == null)
  27. {
  28. MongoClientOptions.Builder buide = new MongoClientOptions.Builder();
  29. buide.connectionsPerHost(100);// 与目标数据库可以建立的最大链接数
  30. buide.connectTimeout(1000 * 60 * 20);// 与数据库建立链接的超时时间
  31. buide.maxWaitTime(100 * 60 * 5);// 一个线程成功获取到一个可用数据库之前的最大等待时间
  32. buide.threadsAllowedToBlockForConnectionMultiplier(100);
  33. buide.maxConnectionIdleTime(0);
  34. buide.maxConnectionLifeTime(0);
  35. buide.socketTimeout(0);
  36. buide.socketKeepAlive(true);
  37. MongoClientOptions myOptions = buide.build();
  38. try
  39. {
  40. mongoClient = new MongoClient(new ServerAddress("127.0.0.1", 27017), myOptions);
  41. } catch (UnknownHostException e)
  42. {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47.  
  48. public static MongoDBDaoImpl getMongoDBDaoImpl()
  49. {
  50. return mongoDBDaoImpl;
  51. }
  52.  
  53. @Override
  54. public DB getDb(String dbName)
  55. {
  56. return mongoClient.getDB(dbName);
  57. }
  58.  
  59. @Override
  60. public DBCollection getCollection(String dbName, String collectionName)
  61. {
  62. DB db = mongoClient.getDB(dbName);
  63. return db.getCollection(collectionName);
  64. }
  65.  
  66. @Override
  67. public boolean inSert(String dbName, String collectionName, String keys, Object values)
  68. {
  69. DB db = mongoClient.getDB(dbName);
  70. DBCollection dbCollection = db.getCollection(collectionName);
  71. long num = dbCollection.count();
  72. BasicDBObject doc = new BasicDBObject();
  73. doc.put(keys, values);
  74. dbCollection.insert(doc);
  75. if (dbCollection.count() - num > 0)
  76. {
  77. System.out.println("添加数据成功!!!");
  78. return true;
  79. }
  80. return false;
  81. }
  82.  
  83. @Override
  84. public boolean delete(String dbName, String collectionName, String keys, Object values)
  85. {
  86. WriteResult writeResult = null;
  87. DB db = mongoClient.getDB(dbName);
  88. DBCollection dbCollection = db.getCollection(collectionName);
  89. BasicDBObject doc = new BasicDBObject();
  90. doc.put(keys, values);
  91. writeResult = dbCollection.remove(doc);
  92. if (writeResult.getN() > 0)
  93. {
  94. System.out.println("删除数据成功!!!!");
  95. return true;
  96. }
  97. return false;
  98. }
  99.  
  100. @Override
  101. public ArrayList<DBObject> find(String dbName, String collectionName, int num)
  102. {
  103. int count=num;
  104. ArrayList<DBObject> list = new ArrayList<DBObject>();
  105. DB db = mongoClient.getDB(dbName);
  106. DBCollection dbCollection = db.getCollection(collectionName);
  107. DBCursor dbCursor = dbCollection.find();
  108. if (num == -1)
  109. {
  110. while (dbCursor.hasNext())
  111. {
  112. list.add(dbCursor.next());
  113. }
  114. } else
  115. {
  116. while(dbCursor.hasNext())
  117. {
  118. if(count==0) break;
  119. list.add(dbCursor.next());
  120. count--;
  121. }
  122. }
  123. return list;
  124. }
  125.  
  126. @Override
  127. public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue)
  128. {
  129. WriteResult writeResult = null;
  130. DB db = mongoClient.getDB(dbName);
  131. DBCollection dbCollection = db.getCollection(collectionName);
  132. writeResult = dbCollection.update(oldValue, newValue);
  133. if (writeResult.getN() > 0)
  134. {
  135. System.out.println("数据更新成功");
  136. return true;
  137. }
  138. return false;
  139. }
  140.  
  141. @Override
  142. public boolean isExit(String dbName, String collectionName, String key, Object value)
  143. {
  144. DB db = mongoClient.getDB(dbName);
  145. DBCollection dbCollection = db.getCollection(collectionName);
  146. BasicDBObject doc = new BasicDBObject();
  147. doc.put(key, value);
  148. if (dbCollection.count(doc) > 0)
  149. {
  150. return true;
  151. }
  152. return false;
  153. }
  154. public static void main(String args[])
  155. {
  156. MongoDBDaoImpl mongoDBDaoImpl=MongoDBDaoImpl.getMongoDBDaoImpl();
  157. ArrayList<DBObject> list=new ArrayList<DBObject>();
  158. list=mongoDBDaoImpl.find("jd", "phone",-1);
  159. System.out.println(list.size());
  160. }
  161. }

注:数据库连接池的实现是用的单例模式(懒汉式)

  1.  
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  1.  

mongodb数据库连接池(java版)的更多相关文章

  1. java 数据库连接池 Oracle版

    首先应加入连接池和数据库连接的配置文件:数据库连接包:ojdbc6.jar数据库连接池包:commons-pool2-2.2.jar                       commons-dbc ...

  2. [数据库连接池] Java数据库连接池--DBCP浅析.

    前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务 ...

  3. 一个经试用效果非常不错的数据库连接池--JAVA

    前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据 ...

  4. 资源池模式和单例模式实现的自定义数据库连接池java实现版

    在企业级开发中,我们往往不会直接使用原生的JDBC操作来实现与数据库得连接.因为数据库的连接是一个很宝贵的资源且耗时,我们往往会在内存中引入一个资源池来统一管理数据库的连接.这个模式也被总结为一种设计 ...

  5. java之数据库连接池-dbcp&c3p0&dbutils

    介绍 因为数据库连接对象的创建比较消耗性能,所以可以在应用程序启动时就在内存中开辟一片空间(集合)存放多个数据库连接对象,后面需要连接时直接从该空间中取而不用新创建:使用完毕后归还连接(将连接重新放回 ...

  6. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  7. 从零开始学 Java - 数据库连接池的选择 Druid

    我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

  8. java web学习总结(十六) -------------------数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  9. 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】

    一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...

随机推荐

  1. 用javascript操作xml(三)关于Jquery的html()不兼容IE的解决办法

    当 $("#xxx").html(data); 不兼容,方法替换为 document.getElementById("xxx").innerHTML=data;

  2. Class TBoundlabel not found and so on..

    Class TBoundlabel not found when you put a labeledit into a panel of CategoryPanel then you'll found ...

  3. C++ static全局变量与全局变量的区别/static全局函数与全局函数的区别

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量 ...

  4. 从头搭建Spring MVC

    1.拷贝jar文件 2.填充Web.xml 在/WEB-INF/web.xml中写入如下内容: <?xml version="1.0" encoding="UTF- ...

  5. 一些.net开源项目

    强大的插件系统,通过Addin构建成一个功能齐全的.net开发IDE.核心是AddInTree.跟随这个项目开发许多有用的组件,比如功能文本编辑器(ICSharpCode.TextEditor),Sh ...

  6. docker下使用caffe的命令记录

    查看所有的images sudo docker images 利用某个image生成container sudo docker run -it --net=host -v /home/tingting ...

  7. Android之单复选框及Spinner实现二级联动

    一.基础学习 1.图形学真的很神奇啊....查了些资料做出了3D云标签,哈哈...其实直接拿来用的,我们要效仿鲁迅先生的拿来主义,嘿嘿~~3D标签云就是做一个球面,然后再球面上取均匀分布的点,把点坐标 ...

  8. 不同框架实现的WebService的服务端获取HttpServletRequest的方法

    一. 基于xfire实现的WebService HttpServletRequest request = XFireServletController.getRequest(); 二. 基于axis实 ...

  9. OA学习笔记-001-项目介绍

    基本知识 框架工具 解决方案(经典应用) 项目 12天 ========================================== OA项目, 12天 BBS 一.什么是OA? 辅助管理.提 ...

  10. Visual Studio统计有效代码行数

    在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头和/开头或者 ...