MongoDB接口类函数
【接口类定义】
[java] view plaincopy
- /**
- * 项目名:SpiderCrawler
- * 文件名:MongoDBDao.java
- * 描述:TODO(用一句话描述该文件做什么)
- */
- package com.newsTest.dao;
- import java.util.ArrayList;
- import com.mongodb.DB; //导入数据库DB
- import com.mongodb.DBCollection; //导入集合DBCollection
- import com.mongodb.DBObject; //导入对象DBObject
- /**
- * 类名: MongoDBDao
- * 包名: com.newsTest.dao
- * 描述: TODO(这里用一句话描述这个类的作用)
- */
- public interface MongoDBDao {
- /**
- * 方法名:getDb
- * 描述:获取指定的mongodb数据库
- * @param dbName
- * @return
- */
- public DB getDb(String dbName);
- /**
- * 方法名:getCollection
- * 描述:获取指定mongodb数据库的collection集合
- * @param dbName 数据库名
- * @param collectionName 数据库集合
- * @return
- */
- public DBCollection getCollection(String dbName, String collectionName);
- /**
- * 方法名:inSert
- * 描述:向指定的数据库中添加给定的keys和相应的values
- * @param dbName
- * @param collectionName
- * @param keys
- * @param values
- * @return
- */
- public boolean inSert(String dbName, String collectionName, String[] keys, Object[] values);
- /**
- *
- * 方法名:delete
- * 作者:zhouyh
- * 创建时间:2014-8-30 下午04:09:00
- * 描述:删除数据库dbName中,指定keys和相应values的值
- * @param dbName
- * @param collectionName
- * @param keys
- * @param values
- * @return
- */
- public boolean delete(String dbName, String collectionName, String[] keys, Object[] values);
- /**
- * 方法名:find
- * 描述:从数据库dbName中查找指定keys和相应values的值
- * @param dbName
- * @param collectionName
- * @param keys
- * @param values
- * @param num
- * @return
- */
- public ArrayList<DBObject> find(String dbName, String collectionName, String[] keys, Object[] values, int num);
- /**
- * 方法名:update
- * 作者:zhouyh
- * 创建时间:2014-8-30 下午04:17:54
- * 描述:更新数据库dbName,用指定的newValue更新oldValue
- * @param dbName
- * @param collectionName
- * @param oldValue
- * @param newValue
- * @return
- */
- public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);
- /**
- * 方法名:isExit
- * 描述:判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在
- * @param dbName
- * @param collectionName
- * @param keys
- * @param values
- * @return
- */
- public boolean isExit(String dbName, String collectionName, String key, Object value);
- }
【借口类实现】
[java] view plaincopy
- /**
- * 项目名:SpiderCrawler
- * 文件名:MongoDBDaoImpl.java
- * 描述:TODO(用一句话描述该文件做什么)
- */
- package com.newsTest.dao.impl;
- import java.net.UnknownHostException; //导入URL的相关Exception的jar包
- import java.util.ArrayList;
- import com.newsTest.dao.MongoDBDao; //导入接口类的定义
- import com.mongodb.BasicDBObject;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.DBCursor; //导入游标
- import com.mongodb.DBObject;
- import com.mongodb.MongoClient;
- import com.mongodb.MongoClientOptions;
- import com.mongodb.MongoException;
- import com.mongodb.WriteResult;
- /**
- * 类名: MongoDBDaoImpl
- * 包名: com.newsTest.dao.impl
- * 描述: TODO(这里用一句话描述这个类的作用)
- */
- public class MongoDBDaoImpl implements MongoDBDao{
- /*MongoDBDao是前面自己定义的接口,而非系统自带*/
- /**
- * MongoClient的实例代表数据库连接池,是线程安全的,可以被多线程共享,客户端在多线程条件下仅维持 一个实例即可
- * Mongo是非线程安全的,目前mongodb API中已经建议用MongoClient替代Mongo
- */
- private MongoClient mongoClient = null;
- /**
- * 私有的构造函数
- */
- private MongoDBDaoImpl(){
- if(mongoClient == null){
- MongoClientOptions.Builder build = new MongoClientOptions.Builder();
- build.connectionsPerHost(50);
- //与目标数据库能够建立的最大connection数量为50
- build.autoConnectRetry(true);
- //自动重连数据库启动
- build.threadsAllowedToBlockForConnectionMultiplier(50);
- //如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
- /*
- * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
- * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
- * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
- */
- build.maxWaitTime(1000*60*2);
- build.connectTimeout(1000*60*1); //与数据库建立连接的timeout设置为1分钟
- MongoClientOptions myOptions = build.build();
- try {
- //数据库连接实例
- mongoClient = new MongoClient("127.0.0.1", myOptions);
- } catch (UnknownHostException e) {
- // TODO 这里写异常处理的代码
- e.printStackTrace();
- } catch (MongoException e){
- e.printStackTrace();
- }
- }
- }