——因為實習工作需要,在學MongoDB,參考了公司的一個MongDB服務類,寫了一個整合的Demo,涉及到的大部分的增刪改查操作,而且還算規範,給大家參考。原始碼:(完整專案檔下載連結:點擊開啟連結)http://download.csdn.net/detail/zhangliangzi/9555872
使用說明:
一、MongoDB資料庫參數配置
1、推薦使用mongodb.cfg.properties配置,則在構造MongoDBService對象的時候只需調用無參構造方法即可自動完成配置。
2、如果沒有通過mongodb.cfg.properties,會採用程式指定的預設配置。
// 定義預設配置,1、IP地址 2、連接埠號碼 3、使用者名稱 4、密碼 5、設定檔位置名 6、資料庫名private static final String MONGODB_ADDRESS = "127.0.0.1";private static final int MONGODB_PORT = 27017;private static final String MONGODB_USERNAME = "root";private static final String MONGODB_PASSWORD = "";private static final String MONGODB_RESOURCE_FILE = "mongodb.cfg.properties";private static final String MONGODB_DBNAME = "test";private static final String MONGODB_COLLECTIONNAME = "test";
3、通過有參構造方法構造MongoDBService對象或通過get/set方法,指定資料庫及集合,優先順序最高。
//有參構造方法,指定資料庫名與集合名public MongoDBServiceImpl(String dbName, String collName) {this.dbName = dbName;this.collName = collName;try {db = getDb();} catch (Throwable e) {e.printStackTrace();}}//無參構造方法,返回設定檔配置的資料庫物件引用,如果設定檔中沒有設定則返回預設資料庫對象引用public MongoDBServiceImpl() {getDb();}/* * 擷取資料庫物件,3種情況(優先順序從高到低):<span style="white-space:pre"></span>*1、構造方法指定2、設定檔指定3、預設資料庫<span style="white-space:pre"></span>*(情況2、3在MongoDButil中設定) */public DB getDb() {if (this.db == null) {if (this.dbName == null) {this.db = MongoDBUtil.getDB();} else {this.db = MongoDBUtil.getDBByName(this.dbName);}}return this.db;}/* * 擷取集合對象,3種情況(優先順序從高到低): *1、構造方法指定2、設定檔指定3、預設資料庫 *(情況2、3在MongoDButil中設定) */public DBCollection getCollection() {if(this.collName != null){return db.getCollection(this.collName);}else {return MongoDBUtil.getDBCollection();}}
二、方法簡介(具體實現參看MongoDBServiceImpl介面實作類別)
1、擷取基本資料或對象:
(1)、擷取資料庫名: getDbName()
(2)、設定資料庫名(指定資料庫): setDbName(String dbName)
(3)、擷取集合名: getCollName()
(4)、設定集合名(指定集合): setCollName(String collName)
(5)、擷取資料庫物件: getDb()
2、資料插入方式:
(1)、插入單條資料: insert(DBObject obj)
(2)、插入多條資料: insertBatch(List<DBObject> list)void
3、資料刪除方式:
(1)、刪除單條資料: delete(DBObject obj)
(2)、刪除多條資料: deleteBatch(List<DBObject> list)
4、數量統計方式:
(1)、擷取集合中資料數量: getCollectionCount()
(2)、擷取合格資料數量: getCount(DBObject obj)
5、尋找資料:
(1)、尋找所有資料: findAll()
(2)、尋找合格資料: find(DBObject obj)
(3)、尋找合格資料並排序: find(DBObject query, DBObject sort)
(4)、尋找合格指定數量的資料並排序:find(DBObject query, DBObject sort, int start, int limit)
(5)、由ID尋找資料: getById(String id)
6、更新資料 :update(DBObject setFields, DBObject whereFields) void
7、列印List<DBObject>: printListDBObj(List<DBObject> list)
測試代碼:(@Test)
public class testMongoService {//使用mongodb.cfg.properties中配置的資料庫與集合,如未指定,使用MongoDBUtil中預設的資料庫與集合MongoDBService mongoDBService1 = new MongoDBServiceImpl();//測試插入資料@Testpublic void testInsert(){//資料一,包括使用者名稱、密碼,地址資訊(省份、城市),愛好[…]BasicDBList dbList1 = new BasicDBList();dbList1.add("basketball");dbList1.add("music");dbList1.add("web");DBObject dbObject1 = new BasicDBObject("username","insert1").append("age", 18).append("address", new BasicDBObject("province","廣東").append("city", "廣州")).append("favourite", dbList1);//資料二BasicDBList dbList2 = new BasicDBList();dbList2.add("football");dbList2.add("music");DBObject dbObject2 = new BasicDBObject("username","insert2").append("age", 18).append("address", new BasicDBObject("province","陝西").append("city", "西安")).append("favourite", dbList2);//資料三BasicDBList dbList3 = new BasicDBList();dbList3.add("Linux");DBObject dbObject3 = new BasicDBObject("username","insert3").append("age", 18).append("address", new BasicDBObject("province","河北").append("city", "保定")).append("favourite", dbList3);//資料四BasicDBList dbList4 = new BasicDBList();dbList4.add("swim");dbList4.add("android");DBObject dbObject4 = new BasicDBObject("username","insert4").append("age", 18).append("address", new BasicDBObject("province","四川").append("city", "成都")).append("favourite", dbList4);//資料五DBObject dbObject5 = new BasicDBObject("username", "insert5").append("age", 28).append("address", new BasicDBObject("city", "杭州"));mongoDBService1.printListDBObj(mongoDBService1.findAll());System.out.println("——————————————————insert collection——————————————————");List<DBObject> list = new ArrayList<DBObject>();list.add(dbObject1);list.add(dbObject2);list.add(dbObject3);list.add(dbObject5);mongoDBService1.insertBatch(list);System.out.println("——————————————————insert one——————————————————");mongoDBService1.insert(dbObject4);mongoDBService1.printListDBObj(mongoDBService1.findAll());}//測試查詢資料@Testpublic void testFind(){DBObject dbObject = new BasicDBObject("username","insert1");System.out.println("數量:" + mongoDBService1.getCollectionCount());System.out.println("username=java的資料數量:" + mongoDBService1.getCount(dbObject));System.out.println("——————————————————find all——————————————————");mongoDBService1.printListDBObj(mongoDBService1.findAll());System.out.println("——————————————————find obj——————————————————");mongoDBService1.printListDBObj(mongoDBService1.find(dbObject));System.out.println("——————————————————find sort——————————————————");mongoDBService1.printListDBObj(mongoDBService1.find(new BasicDBObject(), new BasicDBObject("age", 1)));System.out.println("——————————————————find sort limit——————————————————");mongoDBService1.printListDBObj(mongoDBService1.find(new BasicDBObject(), new BasicDBObject("age", 1), 1, 2));}//測試資料更新@Testpublic void testUpdate(){BasicDBObject newDocument = new BasicDBObject("$set",new BasicDBObject("age",11));BasicDBObject searchQuery = new BasicDBObject().append("username", "insert2");mongoDBService1.printListDBObj(mongoDBService1.find(searchQuery));System.out.println("——————————————————update——————————————————");mongoDBService1.update(newDocument, searchQuery);mongoDBService1.printListDBObj(mongoDBService1.find(searchQuery));}//測試資料刪除@Testpublic void testDelete(){DBObject dbObject1 = new BasicDBObject("username", "insert1");DBObject dbObject2 = new BasicDBObject("username", "insert2");DBObject dbObject3 = new BasicDBObject("username", "insert3");DBObject dbObject4 = new BasicDBObject("username", "insert4");DBObject dbObject5 = new BasicDBObject("username", "insert5");List<DBObject> list = new ArrayList<DBObject>();list.add(dbObject1);list.add(dbObject2);list.add(dbObject3);list.add(dbObject4);mongoDBService1.printListDBObj(mongoDBService1.findAll());System.out.println("——————————————————delete list——————————————————");mongoDBService1.deleteBatch(list);System.out.println("——————————————————delete one——————————————————");mongoDBService1.delete(dbObject5);//System.out.println("——————————————————delete all——————————————————");//mongoDBService1.delete(new BasicDBObject());mongoDBService1.printListDBObj(mongoDBService1.findAll());}}
測試結果:
原始碼:(完整專案檔下載連結:點擊開啟連結)
MongoDBServiceImpl.java
public class MongoDBServiceImpl implements MongoDBService {private String dbName;private String collName;private DB db;//有參構造方法,指定資料庫名與集合名public MongoDBServiceImpl(String dbName, String collName) {this.dbName = dbName;this.collName = collName;try {db = getDb();} catch (Throwable e) {e.printStackTrace();}}//無參構造方法,返回設定檔配置的資料庫物件引用,如果設定檔中沒有設定則返回預設資料庫對象引用public MongoDBServiceImpl() {getDb();}/* * 擷取資料庫物件,3種情況(優先順序從高到低): *1、構造方法指定2、設定檔指定3、預設資料庫 *(情況2、3在MongoDButil中設定) */public DB getDb() {if (this.db == null) {if (this.dbName == null) {this.db = MongoDBUtil.getDB();} else {this.db = MongoDBUtil.getDBByName(this.dbName);}}return this.db;}/* * 擷取集合對象,3種情況(優先順序從高到低): *1、構造方法指定2、設定檔指定3、預設資料庫 *(情況2、3在MongoDButil中設定) */public DBCollection getCollection() {if(this.collName != null){return db.getCollection(this.collName);}else {return MongoDBUtil.getDBCollection();}}public DBObject map2Obj(Map<String, Object> map) {DBObject obj = new BasicDBObject();if (map.containsKey("class") && map.get("class") instanceof Class)map.remove("class");obj.putAll(map);return obj;}//插入資料public void insert(DBObject obj) {getCollection().insert(obj);}//插入多條資料public void insertBatch(List<DBObject> list) {if (list == null || list.isEmpty()) {return;}List<DBObject> listDB = new ArrayList<DBObject>();for (int i = 0; i < list.size(); i++) {listDB.add(list.get(i));}getCollection().insert(listDB);}//刪除資料public void delete(DBObject obj) {getCollection().remove(obj);}//刪除多條資料public void deleteBatch(List<DBObject> list) {if (list == null || list.isEmpty()) {return;}for (int i = 0; i < list.size(); i++) {getCollection().remove(list.get(i));}}//擷取集合中的資料數量public long getCollectionCount() {return getCollection().getCount();}//尋找合格資料數量public long getCount(DBObject obj) {if (obj != null)return getCollection().getCount(obj);return getCollectionCount();}//尋找合格資料public List<DBObject> find(DBObject obj) {DBCursor cur = getCollection().find(obj);return DBCursor2list(cur);}//尋找合格資料並排序@Overridepublic List<DBObject> find(DBObject query, DBObject sort) {DBCursor cur;if (query != null) {cur = getCollection().find(query);} else {cur = getCollection().find();}if (sort != null) {cur.sort(sort);}return DBCursor2list(cur);}//尋找合格資料並排序,規定資料個數@Overridepublic List<DBObject> find(DBObject query, DBObject sort, int start,int limit) {DBCursor cur;if (query != null) {cur = getCollection().find(query);} else {cur = getCollection().find();}if (sort != null) {cur.sort(sort);}if (start == 0) {cur.batchSize(limit);} else {cur.skip(start).limit(limit);}return DBCursor2list(cur);}//將DBCursor轉化為list<DBObject>private List<DBObject> DBCursor2list(DBCursor cur) {List<DBObject> list = new ArrayList<DBObject>();if (cur != null) {list = cur.toArray();}return list;}//更新資料public void update(DBObject setFields, DBObject whereFields) {getCollection().updateMulti(whereFields, setFields);}//查詢集合中所有資料public List<DBObject> findAll() {DBCursor cur = getCollection().find();List<DBObject> list = new ArrayList<DBObject>();if (cur != null) {list = cur.toArray();}return list;}//由ID擷取資料public DBObject getById(String id) {DBObject obj = new BasicDBObject();obj.put("_id", new ObjectId(id));DBObject result = getCollection().findOne(obj);return result;}public String getDbName() {return dbName;}public void setDbName(String dbName) {this.dbName = dbName;this.db = MongoDBUtil.getDBByName(this.dbName);}public String getCollName() {return collName;}public void setCollName(String collName) {this.collName = collName;}@Overridepublic void printListDBObj(List<DBObject> list) {// TODO Auto-generated method stubfor(DBObject dbObject: list){System.out.println(dbObject);}}}
MongoDBUtil.java
public class MongoDBUtil {// 定義預設配置,1、IP地址 2、連接埠號碼 3、使用者名稱 4、密碼 5、設定檔位置名 6、資料庫名private static final String MONGODB_ADDRESS = "127.0.0.1";private static final int MONGODB_PORT = 27017;private static final String MONGODB_USERNAME = "root";private static final String MONGODB_PASSWORD = "";private static final String MONGODB_RESOURCE_FILE = "mongodb.cfg.properties";private static final String MONGODB_DBNAME = "test";private static final String MONGODB_COLLECTIONNAME = "test";// 定義靜態變數,1、Mongo對象(代表資料庫連接)2、DB對象(代表資料庫)3、集合名4、資料庫相關配置映射集合5、已擷取的資料庫連接private static Mongo mongo;private static DB db;private static DBCollection collection;private static Map<String, String> cfgMap = new HashMap<String, String>();private static Hashtable<String, DB> mongoDBs = new Hashtable<String, DB>();/** * 初始化Mongo的資料庫 */static {init();}/** * 擷取設定檔中配置的DB對象 */public static DB getDB() {return db;}/** * 擷取設定檔中配置的DBCollection對象 */public static DBCollection getDBCollection() {return collection;}/** * 根據資料庫名稱,得到資料庫 如果不存在,則建立一個該名稱的資料庫,並設定使用者名稱和密碼為設定檔中的參數值 * * @param dbName * @return DB */@SuppressWarnings("deprecation")public static DB getDBByName(String dbName) {DB db = mongo.getDB(dbName);if (!mongoDBs.contains(db)) {System.out.println("add");db.addUser(cfgMap.get("mongo.db.username"),cfgMap.get("mongo.db.password").toCharArray());mongoDBs.put(dbName, db);}return db;}// ————————————————————————————————————初始化過程————————————————————————————————————/** * 擷取設定檔mongedb.cfg.properties的檔案對象 */public static File getConfigFile() {String path = MongoDBUtil.class.getResource("/").getPath();String fileName = path + MONGODB_RESOURCE_FILE;System.out.println(fileName);File file = new File(fileName);if (file.exists()) {return file;}return null;}/** * 通過mongedb.cfg.properties設定檔初始化配置映射集合,如果沒有編寫設定檔,則載入程式指定的預設配置 */@SuppressWarnings("unchecked")private static void initCfgMap() {File file = getConfigFile();if (file != null) {Properties p = new Properties();try {p.load(new FileInputStream(file));for (Enumeration enu = p.propertyNames(); enu.hasMoreElements();) {String key = (String) enu.nextElement();String value = (String) p.getProperty(key);cfgMap.put(key, value);}} catch (IOException e) {System.out.println("載入Mongo設定檔失敗!");e.printStackTrace();}} else { // 如果沒有編寫設定檔,則載入預設配置cfgMap.put("mongo.db.address", MONGODB_ADDRESS);cfgMap.put("mongo.db.port", String.valueOf(MONGODB_PORT));cfgMap.put("mongo.db.username", MONGODB_USERNAME);cfgMap.put("mongo.db.password", MONGODB_PASSWORD);cfgMap.put("mongo.db.dbname", MONGODB_DBNAME);cfgMap.put("mongo.db.collectionname", MONGODB_COLLECTIONNAME);}}/** * 初始化Mongo的資料庫(將db指向相應對象引用,將collection指向相應對象引用,通過mongoDBs記錄現有資料庫物件) */@SuppressWarnings("deprecation")private static void init() {initCfgMap();try {String address = cfgMap.get("mongo.db.address");int port = Integer.parseInt(cfgMap.get("mongo.db.port").toString());String dbName = cfgMap.get("mongo.db.dbname");String username = cfgMap.get("mongo.db.username");String password = cfgMap.get("mongo.db.password");String collectionName = cfgMap.get("mongo.db.collectionname");mongo = new Mongo(address, port);if (dbName != null && !"".equals(dbName)) {db = mongo.getDB(dbName);if (username != null && !"".equals(username)) {db.addUser(username, password.toCharArray());if (collectionName != null && !"".equals(collectionName)) {collection = db.getCollection(collectionName);}}mongoDBs.put(dbName, db);}} catch (Exception e) {e.printStackTrace();}}}