首页 > 代码库 > MongoDB初探系列之四:MongoDB与Java共舞

MongoDB初探系列之四:MongoDB与Java共舞

因为版本号不同,可能API也有所不同。本次学习用的是3.0版本号。

1、使用的mongodb的jdbc驱动版本号为:mongo-java-driver-3.0.0.jar

2、本节仅仅是简介JDBC操作,临时不考虑效率问题。

3、封装的工具类代码例如以下:

public class MongoDBProxy {

	private static MongoDBProxy proxy=null;//单实例
	private static MongoDatabase db=null;//数据库连接对象
	private static String [] paramArray=new String[5];//数据库连接參数
	private MongoDBProxy(){
		
	}
	static{
		paramArray[0]="username";
		paramArray[1]="password";
		paramArray[2]="host";
		paramArray[3]="port";
		paramArray[4]="databaseName";
	}
	/**
	 * 得到MongoDBProxy
	 * 採用系统默认配置
	 */
	public static MongoDBProxy getMongoDBProxy(){
		if(proxy==null){
			proxy=new MongoDBProxy();
			String sURI = String.format("mongodb://%s:%s@%s:%d/%s",paramArray[0],paramArray[1],paramArray[2],Integer.parseInt(paramArray[3]),paramArray[4]); 
			MongoClientURI uri = new MongoClientURI(sURI); 
			MongoClient mongoClient = new MongoClient(uri); 
			db= mongoClient.getDatabase(paramArray[4]);
		}
		return proxy;
	}
	/**
	 * 批量查询数据
	 * @param table  集合名称 
	 * @param page   分页參数
	 * @param filter 过滤条件
	 * @param sort   排序条件
	 */
	public  Page findDocList(String table,Page page,Bson filter,Bson sort){
		MongoCollection<Document>  coll=db.getCollection(table);
		long count=coll.count(filter);//依据过滤条件获取数据总量
		Page p=PageUtil.createPage(page,Integer.parseInt(String.valueOf(count)));
		p.setFromUrl((page.getFromUrl()==null)?"":page.getFromUrl());
		p.setParamString((page.getParamString()==null)?"":page.getParamString());
		FindIterable<Document> resultIterable=coll.find();
		//运行条件过滤
		resultIterable=resultIterable.sort(sort).filter(filter).skip(p.getBeginIndex()).batchSize(p.getEveryPage());
		MongoCursor<Document> cousor=resultIterable.iterator();
		List<Document> dataList=new ArrayList<Document>();
		while(cousor.hasNext()){
			dataList.add(cousor.next());
		}
		p.setDataList(dataList);
		return PageUtil.buildPageString(p);
	}
	/**
	 * 获取单个文档
	 * @param table  集合名称 
	 * @param filter 过滤条件
	 * @param sort   排序条件
	 */
	public  Document findOneDoc(String table,Bson filter,Bson sort){
		MongoCollection<Document>  coll=db.getCollection(table);
		FindIterable<Document> resultIterable=coll.find();
		if(sort!=null){
			resultIterable.sort(sort);
		}
		if(filter!=null){
			resultIterable.filter(filter);
		}
		return resultIterable.first();
	}
	/**
	 * 加入文档
	 * @param table 集合名称
	 * @prama doc   文档内容
	 */
	public  void addDocument(String table,Document doc){
		MongoCollection<Document> coll=getCollection(table);
		coll.insertOne(doc);
	}
	/**
	 * 批量加入文档
	 * @param table     集合名称
	 * @prama docList   文档集合
	 */
	public  void addDocumentList(String table,List<Document> docList){
		MongoCollection<Document> coll=getCollection(table);
		coll.insertMany(docList);
	}
	/**
	 * 更新文档
	 * @param table  集合名称
	 * @param query  查询条件
	 * @param up     更新数据
	 */
	public  UpdateResult updateDocument(String table,Bson query,Bson up){
		MongoCollection<Document> coll=getCollection(table);
		return coll.updateOne(query,up);
	}
	/**
	 * 替换文档
	 * @param table  集合名称
	 * @param query  查询条件
	 * @param up     替换的文件对象
	 */
	public  UpdateResult replaceDocument(String table,Bson query,Document up){
		MongoCollection<Document> coll=getCollection(table);
		return coll.replaceOne(query, up);
	}
	/**
	 * 删除文档
	 * @param table  集合名称
	 * @param delete 删除条件
	 */
	public  DeleteResult deleteDocument(String table,Bson delete){
		MongoCollection<Document> coll=getCollection(table);
		return coll.deleteOne(delete);
	}
	/**
	 * 获取集合对象
	 * @param table  集合名称
	 */
	private  MongoCollection<Document>  getCollection(String table){
		return db.getCollection(table);
	}
}

4、调用demo

MongoDBProxy proxy=MongoDBProxy.getMongoDBProxy();
System.out.println(proxy.findOneDoc("users",null,null).get("_id"));
Document doc=new Document();
doc.put("user","李四");
proxy.addDocument("users", doc);
Bson bson=new BasicDBObject("user","张三");
proxy.deleteDocument("users", bson);

兴许再深入学习,先用demo上上手哇。哈哈。

MongoDB初探系列之四:MongoDB与Java共舞