MongoDB接口类函数

【接口类定义】 java

[java] view plaincopy  mongodb

  1. /** 数据库

  2.   * 项目名:SpiderCrawler 安全

  3.   * 文件名:MongoDBDao.java 多线程

  4.   * 描述:TODO(用一句话描述该文件作什么)  ide

  5.   */  函数

  6. package com.newsTest.dao;  ui

  7.   

  8. import java.util.ArrayList;  spa

  9.   

  10. import com.mongodb.DB;              //导入数据库DB.net

  11. import com.mongodb.DBCollection;    //导入集合DBCollection

  12. import com.mongodb.DBObject;        //导入对象DBObject

  13.   

  14. /** 

  15.  * 类名: MongoDBDao 

  16.  * 包名: com.newsTest.dao 

  17.  * 描述: TODO(这里用一句话描述这个类的做用)  

  18.  */  

  19. public interface MongoDBDao {  

  20.     /**  

  21.      * 方法名:getDb 

  22.      * 描述:获取指定的mongodb数据库 

  23.      * @param dbName 

  24.      * @return 

  25.      */  

  26.     public DB getDb(String dbName);  

  27.     /**   

  28.      * 方法名:getCollection 

  29.      * 描述:获取指定mongodb数据库的collection集合 

  30.      * @param dbName    数据库名 

  31.      * @param collectionName    数据库集合 

  32.      * @return 

  33.      */  

  34.     public DBCollection getCollection(String dbName, String collectionName);  

  35.     /** 

  36.      * 方法名:inSert 

  37.      * 描述:向指定的数据库中添加给定的keys和相应的values 

  38.      * @param dbName 

  39.      * @param collectionName 

  40.      * @param keys 

  41.      * @param values 

  42.      * @return 

  43.      */  

  44.     public boolean inSert(String dbName, String collectionName, String[] keys, Object[] values);  

  45.     /** 

  46.      *  

  47.      * 方法名:delete 

  48.      * 做者:zhouyh 

  49.      * 建立时间:2014-8-30 下午04:09:00 

  50.      * 描述:删除数据库dbName中,指定keys和相应values的值 

  51.      * @param dbName 

  52.      * @param collectionName 

  53.      * @param keys 

  54.      * @param values 

  55.      * @return 

  56.      */  

  57.     public boolean delete(String dbName, String collectionName, String[] keys, Object[] values);  

  58.     /** 

  59.      * 方法名:find 

  60.      * 描述:从数据库dbName中查找指定keys和相应values的值 

  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, String[] keys, Object[] values, int num);  

  69.     /**  

  70.      * 方法名:update 

  71.      * 做者:zhouyh 

  72.      * 建立时间:2014-8-30 下午04:17:54 

  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.      * 方法名:isExit 

  83.      * 描述:判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在 

  84.      * @param dbName 

  85.      * @param collectionName 

  86.      * @param keys 

  87.      * @param values 

  88.      * @return 

  89.      */  

  90.     public boolean isExit(String dbName, String collectionName, String key, Object value);  

  91.       

  92. }  

 

 

【借口类实现】

[java] view plaincopy

  1. /** 

  2.   * 项目名:SpiderCrawler 

  3.   * 文件名:MongoDBDaoImpl.java 

  4.   * 描述:TODO(用一句话描述该文件作什么)  

  5.   */  

  6. package com.newsTest.dao.impl;  

  7.   

  8. import java.net.UnknownHostException;  //导入URL的相关Exception的jar包

  9. import java.util.ArrayList;  

  10.   

  11. import com.newsTest.dao.MongoDBDao;    //导入接口类的定义

  12. import com.mongodb.BasicDBObject;  

  13. import com.mongodb.DB;  

  14. import com.mongodb.DBCollection;  

  15. import com.mongodb.DBCursor;          //导入游标 

  16. import com.mongodb.DBObject;  

  17. import com.mongodb.MongoClient;  

  18. import com.mongodb.MongoClientOptions;  

  19. import com.mongodb.MongoException;  

  20. import com.mongodb.WriteResult;  

  21.   

  22. /** 

  23.  * 类名: MongoDBDaoImpl 

  24.  * 包名: com.newsTest.dao.impl 

  25.  * 描述: TODO(这里用一句话描述这个类的做用)  

  26.  */  

  27. public class MongoDBDaoImpl implements MongoDBDao{  

  28.  /*MongoDBDao是前面本身定义的接口,而非系统自带*/   

  29.  /** 

  30.  * MongoClient的实例表明数据库链接池,是线程安全的,能够被多线程共享,客户端在多线程条件下仅维持  一个实例便可 

  31.  * Mongo是非线程安全的,目前mongodb API中已经建议用MongoClient替代Mongo 

  32.  */  

  33.  private MongoClient mongoClient = null;  

  34.  /**  

  35.  * 私有的构造函数 

  36.  */  

  37.  private MongoDBDaoImpl(){  

  38.     if(mongoClient == null){  

  39.        MongoClientOptions.Builder build = new MongoClientOptions.Builder();          

  40.        build.connectionsPerHost(50); 

  41.        //与目标数据库可以创建的最大connection数量为50  

  42.        build.autoConnectRetry(true);   

  43.        //自动重连数据库启动  

  44.        build.threadsAllowedToBlockForConnectionMultiplier(50); 

  45.       //若是当前全部的connection都在使用中,则每一个connection上能够有50个线程排队等待  

  46.   /* 

  47.   * 一个线程访问数据库的时候,在成功获取到一个可用数据库链接以前的最长等待时间为2分钟 

  48.   * 这里比较危险,若是超过maxWaitTime都没有获取到这个链接的话,该线程就会抛出Exception 

  49.   * 故这里设置的maxWaitTime应该足够大,以避免因为排队线程过多形成的数据库访问失败 

  50.   */  

  51.        build.maxWaitTime(1000*60*2);  

  52.        build.connectTimeout(1000*60*1);    //与数据库创建链接的timeout设置为1分钟  

  53.               

  54.        MongoClientOptions myOptions = build.build();         

  55.        try {  

  56.            //数据库链接实例  

  57.             mongoClient = new MongoClient("127.0.0.1", myOptions);            

  58.        } catch (UnknownHostException e) {  

  59.            // TODO 这里写异常处理的代码  

  60.             e.printStackTrace();  

  61.        } catch (MongoException e){  

  62.             e.printStackTrace();  

  63.        }  

  64.               

  65.      }