java操作mongodb的增、刪、改、查操作。

建議用一個數據庫連接對象操作數據庫,如果需要多個,可以初始化多個實例。

使用單例模式保持一個數據庫連接:

public class MongoDb {
	
	private static MongoDb instance;
	
	private DB db;
	
	private MongoDb()
	{
		//MongoClient mongoClient = new MongoClient();
		//MongoClient mongoClient = new MongoClient( "localhost" );
		//MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
		MongoClient mongoClient;
		try {
			mongoClient = new MongoClient("192.168.0.228", 27017);
			//mongoClient = new MongoClient(Arrays.asList(new ServerAddress("192.168.0.228", 27017)));
			db = mongoClient.getDB("simulator");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}
	
	public static MongoDb getInstance()
	{
		if(instance == null)
		{
			instance = new MongoDb();
		}
		return instance;
	}
	
	public DB getDb()
	{
		return this.db;
	}
}
DAO層的代碼如下:

public class PlanDao {
	
	/**
	 * 新增一個計劃
	 * @param plan
	 */
	public ObjectId add(Plan plan)
	{
		DB db = MongoDb.getInstance().getDb();
		DBCollection coll = db.getCollection(SimulatorConstant.COLL_PLAN);
		DBObject object = DBObjectUtil.getDBObjectByPlan(plan);
		coll.insert(object);
		return (ObjectId)object.get("_id");
	}
	
	/**
	 * 通過ID獲得一個plan對象
	 * @param id
	 */
	public Plan getById(String id)
	{
		DB db = MongoDb.getInstance().getDb();
		DBCollection coll = db.getCollection(SimulatorConstant.COLL_PLAN);
		DBObject object = coll.findOne(new BasicDBObject("_id", new ObjectId(id)));
		return DBObjectUtil.getPlanByDBObject(object);
	}
	
	/**
	 * 刪除一個對象
	 * @param id
	 */
	public void delete(String id)
	{
		DB db = MongoDb.getInstance().getDb();
		DBCollection coll = db.getCollection(SimulatorConstant.COLL_PLAN);
		coll.remove(new BasicDBObject("_id", new ObjectId(id)));
	}
	
	/**
	 * 獲得所有的plan對象
	 * @return
	 */
	public List<Plan> getAll()
	{
		List<Plan> planList = new ArrayList<Plan>();
		DB db = MongoDb.getInstance().getDb();
		DBCollection coll = db.getCollection(SimulatorConstant.COLL_PLAN);
		DBCursor cursor = coll.find();
		try {
		   while(cursor.hasNext()) {
			   DBObject object = cursor.next();
			   planList.add(DBObjectUtil.getPlanByDBObject(object));
		   }
		} finally {
		   cursor.close();
		}
		return planList;
	}
	
	/**
	 * 修改一個方案
	 * @param plan
	 */
	public void modify(Plan plan)
	{
		DB db = MongoDb.getInstance().getDb();
		DBCollection coll = db.getCollection(SimulatorConstant.COLL_PLAN);
		coll.update(new BasicDBObject("_id", new ObjectId(plan.getId())), DBObjectUtil.getDBObjectByPlan(plan));
	}
}

SimulatorConstant.COLL_PLAN
就是collection的名字。

model層的代碼如下:

public class Plan {
	//方案的id
	private String id;
	//方案名稱
	private String name;

	public Plan()
	{
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}

工具類,實現模型層和數據庫之間的對應:

/**
 * @author hadoop
 *
 */
public class DBObjectUtil {
	
	/**
	 * 通過Plan獲得BasicDBObject對象
	 * @param mac
	 */
	public static BasicDBObject getDBObjectByPlan(Plan plan)
	{
		ObjectId id;
		String sId = plan.getId();
		if(sId == null || sId.length() != 24)
		{
			id = new ObjectId();
		} else {
			id = new ObjectId(sId);
		}
		BasicDBObject doc = new BasicDBObject("_id", id);
		doc.append("name", plan.getName());
		return doc;
	}
	
	/**
	 * 通過BasicDBObject獲得Plan對象
	 * @param object
	 */
	public static Plan getPlanByDBObject(DBObject object)
	{
		Plan plan = new Plan();
		plan.setId(((ObjectId)object.get("_id")).toString());
		plan.setName((String)object.get("name"));
		return plan;
	}
}
驅動可以在我上傳的資源中找到。




發佈了55 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章