建議用一個數據庫連接對象操作數據庫,如果需要多個,可以初始化多個實例。
使用單例模式保持一個數據庫連接:
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;
}
}
驅動可以在我上傳的資源中找到。