1. 程式人生 > >Mongodb底層java驅動框架工具類使用

Mongodb底層java驅動框架工具類使用

使用MongoDB需要對文件結構進行合理的設計,以滿足某些特定需求。比如隨機選取文件,使用skip跳過隨機個文件就沒有在文件中加個隨機鍵,

然後使用某個隨機數對文件進行查詢高效,隨機鍵還能新增索引,效率更高。合理選擇,合理設計。

import java.net.UnknownHostException;
import java.util.Date;
import java.util.List;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.nerd.mongo.config.ConfigFactory;
/**
 * MONGOS
 * @author chenlongquan
 *
 */
public class MongoUtil {
	
	private final static ThreadLocal<Mongo> mongos = new ThreadLocal<Mongo>();
	
	public static DB getdb(){
		return getMongos().getDB(ConfigFactory.getMongoConfig().getDb());
	}
	
	public static Mongo getMongos() {
		Mongo mongo = mongos.get();
		if (mongo == null) {
			try {
				mongo = new Mongo(ConfigFactory.getMongoConfig().getIp(),ConfigFactory.getMongoConfig().getPort());
				mongos.set(mongo);
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (MongoException e) {
				e.printStackTrace();
			}
		}
		return mongo;
	}
	
	public static void close(){
		Mongo mongo = mongos.get();
		if(mongo!=null){
			mongo.close();
			mongos.remove();
		}
	}
	
	
	/**
	 * 獲取集合(表)
	 * 
	 * @param collection
	 */
	public static DBCollection getCollection(String collection) {

		return getdb().getCollection(collection);
	}
......................................................
下面我們就可以在這上面的基礎上對mongodb進行基本的crud操作

例如:

/**
	 * 插入
	 * 
	 * @param collection
	 * @param o 插入
	 *    
	 */
	public static void insert(String collection, DBObject o) {
		
		getCollection(collection).insert(o);
	}

	/**
	 * 批量插入
	 * 
	 * @param collection
	 * @param list
	 *            插入的列表
	 */
	public void insertBatch(String collection, List<DBObject> list) {

		if (list == null || list.isEmpty()) {
			return;
		}

		getCollection(collection).insert(list);

	}

測試用例:
insert("user1",
				new BasicDBObject().append("name", "admin3").append("type", "2").append("score", 70)
					 .append("level", 2).append("inputTime", new Date().getTime()));

工具類使用:
/**
	 * 刪除
	 * 
	 * @param collection
	 * @param q
	 *            查詢條件
	 */
	public void delete(String collection, DBObject q) {

		getCollection(collection).remove(q);
	}

	/**
	 * 批量刪除
	 * 
	 * @param collection
	 * @param list
	 *            刪除條件列表
	 */
	public void deleteBatch(String collection, List<DBObject> list) {

		if (list == null || list.isEmpty()) {
			return;
		}

		for (int i = 0; i < list.size(); i++) {
			getCollection(collection).remove(list.get(i));
		}
	}

	
	/**
	 * 更新
	 * 
	 * @param collection
	 * @param q
	 *            查詢條件
	 * @param setFields
	 *            更新物件
	 */
	public static void update(String collection, DBObject q, DBObject setFields) {

		getCollection(collection).updateMulti(q,
				new BasicDBObject("$set", setFields));
	}

	/**
	 * 查詢集合所有物件
	 * 
	 * @param collection
	 */
	public static List<DBObject> findAll(String collection) {

		return getCollection(collection).find().toArray();
	}

	/**
	 * 按順序查詢集合所有物件
	 * 
	 * @param collection
	 *            資料集
	 * @param orderBy
	 *            排序
	 */
	public static List<DBObject> findAll(String collection, DBObject orderBy) {

		return getCollection(collection).find().sort(orderBy)
				.toArray();
	}

	/**
	 * 查詢(返回一個物件)
	 * 
	 * @param collection
	 * @param q
	 *            查詢條件
	 */
	public static DBObject findOne(String collection, DBObject q) {

		return getCollection(collection).findOne(q);
	}

	/**
	 * 查詢(返回一個物件)
	 * 
	 * @param collection
	 * @param q
	 *            查詢條件
	 * @param fileds
	 *            返回欄位
	 */
	public static DBObject findOne(String collection, DBObject q, DBObject fileds) {

		return getCollection(collection).findOne(q, fileds);
	}

	

	/**
	 * 分頁查詢集合物件,返回特定欄位
	 * 
	 * @param collection
	 * @param q
	 *            查詢條件
	 * @param fileds
	 *            返回欄位
	 * @pageNo 第n頁
	 * @perPageCount 每頁記錄數
	 */
	public static List<DBObject> findLess(String collection, DBObject q, DBObject fileds, int pageNo,
			int perPageCount) {

		return getCollection(collection).find(q, fileds)
				.skip((pageNo - 1) * perPageCount).limit(perPageCount)
				.toArray();
	}