MongoDB——MongoProvider

        MongoDB,最终还是要被操作语言调用的。我们最近的一个java项目,业务比较简单,但对超文本的操作比较多,最终选择了MongoDB这款非关系型数据库。下面就看看我们项目中封装的一个类MongoProvider,是如何对MongoDB进行增删改查的。

        在说MongoProvider之前,先看一下 “数据库连接” 的这个类。

public class MongoConnect {
	
	public static MongoConnect instance;
	
	private Mongo mongo;
	private String dbname= "";
	
	private MongoConnect() {
		instance = this;
	}
	
	// 单例
	public static MongoConnect getInstance() {
		if(instance == null)
			new MongoConnect();
		return instance;
	}
	
	// 连接数据库
	public void connect() {
		System.setProperty("MONGO.POOLSIZE", String.valueOf(200));
		try {
			String ip = FSConfig.getInstance().getVar("db.ip");
			String pt = FSConfig.getInstance().getVar("db.port");
			dbname = FSConfig.getInstance().getVar("db.dbname");
			if(ip == null || pt == null){
				System.out.println("Database not configured!!!!!");
				return;
			}
			int port = Integer.valueOf(pt);
			System.out.println("Connecting to db: "+ip+":"+port);
			mongo = new Mongo(ip, port);
			MongoOptions options = mongo.getMongoOptions();
			options.autoConnectRetry = true;
			options.connectionsPerHost = 1000;
			boolean result = mongo.getDB(dbname).authenticate(FSConfig.getInstance().getVar("db.account"), 
					FSConfig.getInstance().getVar("db.password").toCharArray());
			if(result) {
				System.out.println("DB connected");
			} else {
				System.out.println("DB connection failed!");
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public DB getDB() {
		if(mongo == null)
			return null;
		return mongo.getDB(dbname);
	}
	
	public DB getDB(String dbName) {
		if(mongo == null)
			return null;
		return mongo.getDB(dbName);
	}
	
	public void close() {
		if(mongo == null)
			return;
		mongo.close();
	}	
}

        下面,就是重头戏——MongoProvider,封装了一些常用的对MongoDB的增删除改查操作。主要内容都在代码注释里了,直接看代码吧。

public class MongoProvider {
	// 图片路径
	public static final String PIC_DIR = "./";
	
	// 集合名称
	public static final String PLATFORM_USER = "platform_user";
	public static final String IM_USERPIC = "im_userpic";
	public static final String IM_ATTACHEMENT = "im_attachement";
	public static final String IM_MSGTEMPFILE = "im_msgtempfile";
	public static final String IM_DEPARTMENT = "im_department";
	public static final String IM_SHAREFORDER = "im_shareforder";
	public static final String IM_ATTENCEINFO = "im_attenceinfo";
	public static final String IM_ATTENCE = "im_attence";
	public static final String IM_ATTENCE_SPECIAL = "im_attencespecial";
	public static final String IM_FILES = "im_files";
	public static final String IM_FILE_PKG = "im_file_pkg";
	public static final String IM_FILE_STORAGE = "im_file_storage";
	public static final String IM_FILE_TEMP = "im_file_temp";

	private static Logger log = Logger.getLogger(MongoProvider.class.getName());

	/**
	 * 查询集合中的文档数
	 * @param collectionName
	 * 		集合名称
	 * @param map
	 * 		查询条件
	 * @return
	 * 		
	 */
	public static long count(String collectionName, DBObject map) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			if (map == null) {
				return collection.count();
			} else {
				return collection.count(map);
			}
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
		return 0;
	}

	/**
	 * 添加
	 * @param collectionName
	 * 		集合名称
	 * @param map
	 * 		查询条件
	 */
	public static void insert(String collectionName, DBObject map) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.insert(map);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	/**
	 * 更新
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		更新条件
	 * @param doc
	 * 		更新字段
	 */
	public static void update(String collectionName, DBObject condition,
			DBObject doc) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.update(condition, doc);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}
	
	/**
	 * 更新全部
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		更新条件
	 * @param doc
	 * 		更新字段
	 */
	public static void updateAll(String collectionName, DBObject condition, DBObject doc) {
			try {
				DBCollection collection = MongoConnect.getInstance().getDB()
						.getCollection(collectionName);
				collection.update(condition, doc, false, true);
			} catch (Exception e) {
				log.log(Level.WARNING, "", e);
			}
	}
	
	/**
	 * 更新
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		更新条件
	 * @param doc
	 * 		更新字段
	 * @param multi
	 * 		mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
	 */
	public static void update(String collectionName, DBObject condition,
			DBObject doc, boolean multi) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.update(condition, doc, false, multi);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}	
	
	/**
	 * 更新
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		更新条件
	 * @param doc
	 * 		更新字段
	 * @param upsert
	 * 		如果不存在update的记录,是否插入一条新的,true为插入,默认是false,不插入。
	 * @param multi
	 * 		mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
	 */
	public static void update(String collectionName, DBObject condition,
			DBObject doc, boolean upsert, boolean multi) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.update(condition, doc, false, multi);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}
	
	/**
	 * 更新或添加
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		条件
	 * @param doc
	 * 		字段
	 */
	public static void upsert(String collectionName, DBObject condition,
			DBObject doc) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.update(condition, doc, true, false);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	/**
	 * 删除文档
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		条件
	 */
	public static void remove(String collectionName, DBObject condition) {
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			collection.remove(condition);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	/**
	 * 查询
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		查询条件
	 * @return
	 */
	public static List<DBObject> find(String collectionName, DBObject condition) {
		List<DBObject> map = new ArrayList<DBObject>();
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			DBCursor result = collection.find(condition);
			while (result.hasNext()) {
				DBObject ob = result.next();
				map.add(ob);
			}
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
		return map;
	}

	/**
	 * 查询
	 * @param collectionName
	 * 		集合名称
	 * @param condition
	 * 		查询条件
	 * @param keys
	 * 		查询字段
	 * @return
	 */
	public static List<DBObject> find(String collectionName,
			DBObject condition, DBObject keys) {
		List<DBObject> map = new ArrayList<DBObject>();
		try {
			DBCollection collection = MongoConnect.getInstance().getDB()
					.getCollection(collectionName);
			DBCursor result = collection.find(condition, keys);
			while (result.hasNext()) {
				DBObject ob = result.next();
				map.add(ob);
			}
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
		return map;
	}
	
	/**
	 * 查询集合中的所有文档
	 * @param collectionName
	 * 		集合名称
	 * @return
	 */
	public static DBCollection getConection(String collectionName) {
		DBCollection collection = MongoConnect.getInstance().getDB()
				.getCollection(collectionName);
		return collection;
	}

	// 保存用户图片
	public static boolean saveUserPic(String filename, String file, String account) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
			GridFSInputFile input = gfs.createFile(file);
			input.setFilename(filename);
			input.put("account", account);
			input.put("lastupdate", System.currentTimeMillis());
			input.save();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return false;
		}
		return true;
	}
	
	// 保存用户图片
	public static boolean saveUserPic(String filename, File file, String account) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
			GridFSInputFile input = gfs.createFile(file);
			input.setFilename(filename);
			input.put("account", account);
			input.put("lastUpdate", System.currentTimeMillis());
			input.save();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return false;
		}
		return true;
	}

	// 获取图片的数据流
	public static void getPicStream(String account, String filename, OutputStream out) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
			DBObject con = new BasicDBObject();
			con.put("account", account);
			con.put("filename", filename);
			GridFSDBFile output = gfs.findOne(con);
			output.writeTo(out);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	// 删除图片
	public static void deletePic(String account, String filename) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
			DBObject con = new BasicDBObject();
			con.put("account", account);
			con.put("filename", filename);
			gfs.remove(con);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}
	// 删除图片
	public static void deletePic(DBObject doc) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), IM_USERPIC);
			gfs.remove(doc);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	// 保存文件
	public static boolean saveFile(String account, String fileId, File file, String collection) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
			GridFSInputFile input = gfs.createFile(file);
			input.setFilename(fileId);
			input.put("account", account);
			input.put("lastupdate", System.currentTimeMillis());
			input.save();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return false;
		}
		return true;
	}

	// 保存文件
	public static boolean saveFile(String account, String fileId, 
			InputStream in, String collection) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
			GridFSInputFile input = gfs.createFile(in);
			input.setFilename(fileId);
			input.put("account", account);
			input.put("lastupdate", System.currentTimeMillis());
			input.save();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return false;
		}
		return true;
	}

	// 保存共享文件夹
	public static boolean saveShareForder(String fileId, String account, 
			String fileName, String creator, InputStream in, String collection) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
			GridFSInputFile input = gfs.createFile(in);
			input.setFilename(fileId);
			input.put("account", account);
			input.put("lastupdate", System.currentTimeMillis());
			input.put("creator", creator);
			input.put("displayname", fileName);
			input.save();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return false;
		}
		return true;
	}

	// 获取共享文件夹的length
	public static long getShareForderLength(String fileId, String account, 
			OutputStream out, String colletion) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
			DBObject con = new BasicDBObject();
			con.put("account", account);
			con.put("filename", fileId);
			GridFSDBFile output = gfs.findOne(con);
			return output.getLength();
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
			return 0;
		}
	}

	// 获取文件的数据流
	public static void getFileStream(String account, String filename, OutputStream out, String colletion) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
			DBObject con = new BasicDBObject();
			con.put("account", account);
			con.put("filename", filename);
			GridFSDBFile output = gfs.findOne(con);
			output.writeTo(out);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	// 删除文件
	public static void deleteFile(String account, String filename, String colletion) {
		try {
			DBObject con = new BasicDBObject();
			con.put("account", account);
			con.put("filename", filename);
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), colletion);
			gfs.remove(con);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}

	// 删除文件
	public static void deleteFile(DBObject doc, String collection) {
		try {
			GridFS gfs = new GridFS(MongoConnect.getInstance().getDB(), collection);
			gfs.remove(doc);
		} catch (Exception e) {
			log.log(Level.WARNING, "", e);
		}
	}
}

      

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值